Runtime

.NET 10'da PipeReader ile büyük JSON verisini okumak

Ali Hamza Ansari, .NET 10'un System.Text.Json kütüphanesine eklediği PipeReader aşırı yüklemesini, büyük bir JSON yükünü Stream ile okumayla karşılaştırıyor. Çalışma süresi, ayrılan bellek ve GC koleksiyonları ölçülüyor. Yoğun istek alan API'lerde deserializasyon maliyetini azaltıp azaltmayacağı için okumaya değer.

elmah.io Blog Ali Hamza Ansari
Yayın tarihi
Okuma süresi
6 dk okuma
agent çalıştırması #7
agent çalıştırması #7
Orijinale git blog.elmah.io

Bu haberi bildir

Özette bir hata mı var, ya da bu içeriğin sahibi misin? Mesajın doğrudan bana e-posta olarak gelir.

Mesaj türü

Kilit noktalar

  • System.Text.Json, .NET 10 ile PipeReader alan bir deserializasyon aşırı yüklemesi sunuyor.
  • Yazarın testinde PipeReader yolu Stream yoluna göre yaklaşık yüzde 21 daha hızlı çalıştı.
  • Ölçümler bir milyon kayıtlık tek bir dosya ve tek bir makine üzerinde yapıldı.
  • PipeReader kullanıldığında PipeReader.CompleteAsync() çağrısı ile okuyucunun kapatılması gerekir.
  • Toplam bellek ayırımı biraz artabilir; kazanç GC baskısının azalmasından gelir.
  • Karar vermeden önce kendi payload boyutunuzla ve GC sayaçlarınızla ölçüm yapın.

elmah.io blogundan Ali Hamza Ansari, .NET 10 ile gelen PipeReader aşırı yüklemesinin büyük bir JSON dosyasının deserializasyonunu ne kadar hafifletebileceğini test ediyor. Örnekte bir minimal API, bir milyon telemetri kaydı içeren yaklaşık 72 MB'lık bir dosya üretiyor ve aynı dosyayı önce bir Stream üzerinden, sonra aynı akıştan oluşturulan bir PipeReader ile okuyor. Her ölçümden önce GC zorlanıyor ve süre, ayrılan bellek ile Gen0/Gen1/Gen2 koleksiyon sayıları kaydediliyor.

Yazara göre PipeReader yolu yaklaşık yüzde 21 daha hızlı çalışmış ve GC baskısı azalmış. Küçük bir ek ayırmanın, büyük nesne yığınındaki (LOH) yoğunluğu azaltmak için değdiğini savunuyor. Ancak sonuçlar tek bir makinede yapılmış basit bir demodan geliyor; kendi yük profilinizde ölçmeden sıcak bir endpoint'i değiştirmemek gerekir.

Gerçek dünyada kullanımı

  • Büyük toplu veri yükleyen (bulk import) ASP.NET Core minimal API'si
  • Yüksek trafikli ve büyük gövdeli telemetri veya IoT veri alım endpoint'i
  • Büyük JSON dosyalarını işleyen arka plan işçisi

Neden önemli

Büyük JSON gövdelerini sık işleyen servislerde deserializasyonun GC maliyeti gerçek bir darboğaz olabilir. PipeReader aşırı yüklemesi, bunu Stream tabanlı kodda küçük bir değişiklikle deneyebileceğiniz bir seçenek sunuyor.

Bu özet, elmah.io Blog üzerindeki orijinal yazıdan agent tarafından üretildi. Yazının tamamı ve tüm hakları ilgili yazara/yayıncıya aittir. Orijinal yazıya git

Benzer haberler

Geri bildirim

Bir hata mı buldun, bir fikrin mi var? Yazdığın mesaj doğrudan bana e-posta olarak gelir.

Mesaj türü