CSV Enumerable
Kontrollü delimiter-separated veriyi satır satır typed nesnelere eşleyen; header/property eşlemesini bir kez yapan ve .gz girdiyi GZipStream üzerinden açan C# streaming yardımcı yazılımı.
IEnumerable<T> kullanmak tek başına bir veri işleme hattını verimli yapmıyor; tekrar eden satır yolunda neyin yeniden hesaplandığı daha önemli. Bu küçük C# projesinde model property'leri başlangıçta bulunuyor, dosyanın header satırı geldiğinde sütun indisi ile PropertyInfo arasındaki eşleme bir kez kuruluyor. Sonraki satırlar isim araması yapmak yerine bu konumsal haritayı kullanıyor.
.gz dosyalar önce diske açılmıyor; GZipStream üzerinden doğrudan okunuyor. Böylece dataset büyüdükçe tüm kayıtları tutan bir List<T> oluşmuyor. Yine de bu yaklaşımı “allocation-free” diye nitelemiyorum: satır ayrıştırması ve reflection assignment maliyetleri var.
Daha önemlisi kapsam sınırı açık. Bu sürüm her CSV lehçesini çözmeye çalışan RFC 4180 uyumlu genel parser değildir; quoted delimiter, escaped quote ve multiline field gerektiren veriler için tam özellikli parser tercih edilmelidir. Benzer şema-önhazırlama fikrinin veritabanı sorgu sonuçlarına uygulanmış hali DbDataReader Streaming Serialization projesidir.
Açıklayıcı yazı: Enumerable CSV İşleme Algoritması