DbDataReader Streaming Serialization
DbDataReader sonuçlarını DataTable veya DTO koleksiyonu oluşturmadan türe özgü erişim yöntemleri üzerinden doğrudan JSON/XML akışına yazan, şema bilgisini bir kez hazırlayan C# serileştirme katmanı.
Bu yazılımı geliştirirken çıkış noktam, serileştiricinin hızından önce veri yolundaki gereksiz ara katmanları kaldırmaktı. Büyük bir sorgu sonucunu önce DataTable, List<DTO> veya sözlük koleksiyonuna doldurup sonra yeniden dolaşmak, hem bellek ayırma miktarını hem de GC baskısını artırıyor. Burada DbDataReader doğrudan Utf8JsonWriter ya da XmlWriter ile buluşturuluyor.
Sütun adı ve veri tipi gibi değişmeyen bilgiler ilk satırdan önce hazırlanıyor. JSON alan adları önceden kodlanıyor; mümkün olan CLR tiplerinde türe özgü erişim yöntemleri kullanılıyor. DbRowView ise her satır için yeni bir sarmalayıcı üretmek yerine aynı görünümü ilerleyen okuyucu üzerinde yeniden kullanıyor. Bunun karşılığında sözleşme nettir: satır görünümü saklanacak kalıcı bir anlık görüntü değildir.
Büyük LOB değerlerinde skaler hızlı yol zorlanmıyor; sağlayıcının GetStream veya GetTextReader yoluna geçmek daha doğru. Aynı “üstveri bir kez, tekrar eden satır yolu kısa” ilkesi kontrollü CSV/GZip verisinde CSV Enumerable projesinde başka biçimde uygulanıyor.
Teknik çözümleme: DbDataReader ile Akış Tabanlı JSON ve XML Serileştirme GitHub: GitHub Zenodo: Zenodo DOI: DOI