.Net 7 JSON Performans tuzağı
Nano optimizasyonlar yapmaktan kaçınırken kod yazarken performansı göz önünde bulundurmalıyız. Bazen tutumlu bir optimizasyon gibi görünen şey, büyük bir fark yaratır. Bugün System.Text.Json'un nasıl bir performans cezası tuzağına sahip olduğunu göreceğiz.
Bu kodun nesi var?
Bu işlevi her çalıştırdığımızda, yeni bir JsonSerializerOptions oluşturur. Her seferinde yeni bir nesneyi başlatmak ne kadar kötü? Genel olarak, her seferinde yeni bir nesne oluşturmak, performans ve bellek ayırma açısından ihmal edilebilir düzeydedir. Yine de, bir performans profili çıkarırken ekibim şüpheli sonuçlar aldı. Bu işlevler için harcanan süre eşitti:
- SendToServiceBus()
- Serileştirme()
Serileştirme neden bu kadar yavaş?
Yeni System.Text.Json, serileştirme meta verilerini önbelleğe almak için JsonSerializerOptions'ın örnek referansını kullanır; bu nedenle, her seferinde yeni bir örnek sağlarsanız, önbelleğe almayı kaybedersiniz ve kodun, her işlev için meta verileri oluşturma gibi pahalı bir işlemi yapması gerekir. aramak.
Sorun o kadar yaygın ki Microsoft'un buna adanmış bir sayfası bile var.
Misal
Dokümanlar bu kıyaslama örneğini sağlar:
Dokümanlardan da görebileceğiniz gibi, fark çok büyük, 200 kattan fazla daha pahalı. Ve size bundan bahsedecek hiçbir şey yok, istisna veya uyarı yok. Bunu bulmanın tek yolu, yük testi ve profil oluşturma sırasındadır. Bunun bir uyarı mı olması gerektiğini merak ediyorum, bu yüzden bu hatanın yapılma sayısını azaltıyoruz.
Çözüm
Nesnelerin yaşam döngülerini bilmek ve tekil nesneler için oluşturmayı optimize etmek gibi iyi uygulamalar, göründüklerinden daha fazlasını getirebilir. Bu nedenle, istek başına ne zaman bir Singleton veya yeni bir nesne istediğinizi öğrenmenizi öneririm.
Çerçeve, dahili meta verileri SerializerOptions referansına göre önbelleğe aldığından, her seferinde seri hale getirici seçenekleri oluşturmanın önemli sonuçları olduğunu unutmayın.
Yeni bir JsonSerializerOptions() görürseniz, bunun Singleton modelinde olduğundan emin olun.
Mutlu kodlamalar.

![Bağlantılı Liste Nedir? [Bölüm 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































