C# da geçici depolama alanı

Başlatan Mucit23, 17 Ekim 2024, 17:00:15

Mucit23

Selamlar

C# da uart üzerinden 10ms aralıklarla veri alıyorum. Bu verileri çok uzun süre boyunca loglamam gerekiyor. Yaklaşık 15-20dk boyunca yaklaşık 10 karakterden oluşan string veriler gelecek.

Saniyede 100 veri geliyor. Dolayısıyla 1 dakikada 6000 veri, 15 dakikada ise 90000 veya daha fazla veri gelecek. Bu verileri geçici olarak depolamak,
txt veya Excel dosyası olarak kaydetmek istiyorum. Bu geçici depolama için kullanılabilecek en uygun yöntem hangisidir?

mehmet

Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr
https://creativecommons.org/licenses/by/4.0/deed.tr "CC BY"

kimlenbu

Eğer maksimum veri boyutu belliyse ram'e atın, loglama bitince de csv formatında excel'de açılacak halde dosyaya kaydedersiniz, belli değilse de bir task gelen veriyi alır, başka bir task direkt Excel dosyasına csv formatında kaydeder.

ByTEK

#3
Tecrübeme istinaden belirtmek isterim.

Ben daha önce bir projede benzer şekilde loglama yapmıştım. Gelen logları Ram'de tutup her 1000 satıra ulaşınca csv dosyasına kayıt ediyordum. buradaki 1000 rakamı ihtiyaca göre değişir. İlaveten veri belli bir süre(mesela 2dk sonunda gibi) içerisinde 1000 satıra ulaşmazsa gene dosyaya yazıyordum. Ben her dosyayı dizinde belli bir isimlendirmeye göre farklı dosyaya kayıt ediyordum. Projeye göre karar verilir. Her gün bir önceki gündeki dosyaları alıp belli bir algoritmaya göre tek file yapıyordum. İlk zamanlar direkt dosyaya kayıt ettiğim için (diske ya da SQL DB) disk kullanımı fazla oluyordu.

Benim projede Loglar Güvenlik duvarından gelen syslog portundan gelen string şeklindeydi ve bayağı yoğundu. Denediğim en verimli yöntem buydu.

Belki fikir verir diye paylaşmak istedim.

Mucit23

#4
Deneme Amaçlı richtextbox komponenti koyup oraya ekleme yapmak istedim nereye kadar çalışacak diye oturup bekledim. Her gelen veriyi anlık olarak bu textbox'a eklemeyi denedim ama bir süre sonra program şişmeye başlıyor. Veri akışında sekte olmuyor. Ama veri alan event içerisinde dosya yazma işleri yapınca program şişiyor.

CSV dosyası oluşturmak mantıklı gibi. Ama yine de bir geçici tampon oluşturmak gerekiyor sanırım. Çünkü anlık veri hızı yüksek olduğundan data recieved olayında ancak ram'e yazma yapılabilir. Bunun için sanırım örneğin boyutu 1000 olan bir string array oluşturup bu array'e yazma yapılarak veriler ram'de tutulmuş olabilir. @ByTEK Hocam dediğiniz yöntemi bir deneyeceğim.

Serial port ile 115200 bps hızında güvenli olarak 15-20 karakterlik verileri periyodik olarak gönderebiliyorum. Saniyede gönderdiğim veri paketi 100 adet. Daha yüksek hızlar için uart uygun değil gibi. Ethernet Standart TCP protokolü paket paket gönderim hızım ne olabilir? Yani saniyede 1000 adet 15-20 karakterden oluşan TCP paketleri haberleşme için uygun bir yöntem midir?