Merhaba,
ilk olarak forumumuza hoşgeldiniz.
Diğer yandan sorunuzun sanki biraz daha sizin planınıza uygun ilerlemesi gereken bir yapısı var diye düşünüyorum. Bunun nedenine gelince; benim önerim sizin calışma ve elektronik programlama çerçevesine ters olabilir ama öneri üzerine beraberce ve yavaş yavaş ilerleyebiliriz.
Elektronik programlamada sizinde bildiginiz üzere sadece veri üzerine dikkatli bir sekilde calisilmasi gerekiyor, eğer veriler sizin bahsettiginiz gibi saniyede 100 string veri geliyorsa. Çünkü anlık verilerin iletilme esnasında söyle bir sorun çıkabiliyor. Uygulamanız verileri cihazdan belirli bir protokol (SPI, CAN, I2C vs.) araciligiyla alirken ayni protokole uygun Baud (Bd) rate ile alır ancak bunu da bildiginiz gibi C# da ayarlayabiliyorsunuz ya da diğer orta seviyeli dillerde C veya C++ gibi. Burada bir sorun gözükmüyor ama eğer uygulamanız sistem gereksinimlerinin karsilanmadigi veya yetmekte sinir seviyede olan bir teknik yapıda ya da sistemin yüksek kaynak tükettiği bir ortamda verileri gönderirken sorun tam olarak burada başlıyor.
Bu örnegi neden yazdigima gelince onu da söyle aciklayayim. İşte tam bu esnada sizin bildiginiz üzere gözüken iki seçeneğiniz var. Fiziksel diske ya da memory'e yazmanız gerekecek. Fiziksel diske gelen bu verileri her saniyede 100 string icin 2048 KB ilk bir tampon txt dosyası ile verilerin saglikli alınması saglanabilir ver ardından gelenler icin bu 2048 KB ilk tampon önerisine uygun ilerlenir. Uygulamanızı nasıl planladiginizi bilemiyorum ancak diyelim ki bir thread sizin bu veri alisverisiyle ilgilenirken ikinci thread'iniz de tampon islemi ile ilgilenir. Bu da multithreading ilerlemeyi gerektirir. Yani ilk thread'iniz saglikli veri alisverisinden sorumlu olur, ikincisi ise saglikli alinan verilerin islenmesi veya sonraki islemler icin kullanılır. Bu ilk önerimin amacı verilerin ilk olarak saglikli bir sekilde alınması ve ardından gecici islemlerin yapilmasini saglamak. Çünkü bu konularda veri kaybı çok meşhur bildiginiz üzere. Bu arada 2048 KB sadece bir örnekti ve bunun sinirini siz belirleyebilirsiniz hedef teknik cihaz veya sistem icin.
Ikinci öneride söyle olabilir; yine bildiginiz üzere Memory de tutma. Ancak bu her hedef cihaz icin değişkenlik gösterir. Hatta ayni versiyon isletim sistemi olsa bile. Bu nedenle de kendi yazılım bilginiz, hedef cihazın Memory yapisinin buna uygunlugu gibi konular girmektedir. Ancak burada hiz avantajınız olur ki bu da elektronik haberlesmede çok önemli. Bu kısımda bir Stream nesnesi, MemoryCache (Windows icin System Runtime) ya da alternatif ücüncü parti ve bu konuda ün yapmış Redis kullanabilirsiniz. Ya da yine C# ile pointer kullanımı ile kendiniz hardcode seklinde ilerleyebilirsiniz. C# pointer icin Visual Studio da unsafe ayarlamanız gerekmektedir.
Burada en önemli konu verilerin saglikli alınması. Bu nedenle Memory üzerinde bile islem yapsanız dahi 2048 KB tampon txt önerisi gibi yine Memory de ayni durumu gözetlemenizi tavsiye ederim. Her durumda uygulamanızı calistiracak hedef teknik cihazin altyapisi çok önemli.
Kisisel olarak "sen olsan ne yapardin" kisimina gelince. Ben olsam Memory de tutardım ve ayrıca bu is icin kesinlikle bir ya da iki thread görevlendirirdim. Hatta verilerinizin yoğunluğuna göre, yani 90000 string +- 350 MB yapıyor ve bu bir thread icin cocuk oyuncağı islemi. İlerisi icin verilerinizin yoğunluğu artarsa +25 GB gibi o zaman Task konusuna bakin lütfen. Bir thread taskdan hizlidir, veri yoğunluğu eğer 25/30 GB'dan düşükse. Ancak Task veri yoğunluğunun fazla olduğu alanlarda thread'dan hızlı calisir. Buda size ayrıca sonradan fazla veri islemleriniz icin ekstra bilgidir. Ancak yukarıda yazdigim gibi uygulamanızı calistiracak hedef cihazin teknik altyapısı çok önemli. Ayrıca Memory yönetimi konusunda deneyiminiz yok ise korkmanızı gerektirecek bir durum yok. Bu konuda deneyim sahibi olursunuz yeni başlasanız bile.
Saygilarimla