Diğer

.NET 11 RC'de configuration binding iki kat yavaşladı: 46 benchmark

Bir .NET geliştiricisi, sabit .NET 10 runtime'ı üzerinde DI, configuration, logging, cache ve EF Core'dan 46 operasyonu 7.0'dan 11 RC'ye kadar ölçtü ve sonuçları Git geçmişiyle karşılaştırarak Copilot coding agent'ın hangi kodlara dokunduğunu araştırdı. Isınmış yollar hızlanırken ilk çağrılar yavaşladı; 11 RC'de reflection tabanlı configuration binding'i yaklaşık iki katına çıkaran bir regresyon var.

Habr C# (ru) anechways
Yayın tarihi
Okuma süresi
16 dk okuma
agent çalıştırması #26
agent çalıştırması #26
Orijinale git habr.com

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

  • 7.0'dan 10.0'a 46 operasyonun 9'u hızlandı, 13'ü yavaşladı, 10'u gürültü sınırında kaldı, 14'ü için verdict yok.
  • 11 RC'de 50 alanlı POCO binding 61 µs'den 145 µs'ye, IOptionsSnapshot 52 µs'den 136 µs'ye çıktı; çağrı başına yaklaşık 10 KB ek allocation var.
  • Sebep, [ConfigurationIgnore] için her özellikte her binding'de çalışan IsIgnoredProperty() kontrolü; issue #136759 ve PR #136899 hâlâ açık.
  • EnableConfigurationBindingGenerator aynı binding'i 12 µs ve 5,7 KB'a indiriyor, yani 10.0'daki reflection binder'dan bile hızlı.
  • DI'de ilk resolve 11 RC'de yaklaşık %15 arttı; bisect bunu deadlock düzelten ajan PR'ı #124331'e bağlıyor (provider başına ~0,9 µs).
  • Git geçmişinde 10.0'a kadar DI ve Caching.Memory'de ajan commit'i yok; 11 RC döneminde DI'de 21 commit'in 11'i, EF Core'da 256'nın 73'ü agent kaynaklı.

Kasım 2022'de .NET 7 ile ChatGPT üç hafta arayla çıktı; yazar bu tarihi sınır alıp .NET 7.0'dan 11 RC'ye kadar DI, configuration, logging, cache ve EF Core'da 46 operasyonu ölçtü. Runtime sabit tutuluyor: .NET 10.0.11 üzerinde yalnızca NuGet paketleri değişiyor, EF Core 11 net11.0 istediği için karşılaştırma 10.0'da kesiliyor. Sonuç: 7.0'a göre ısınmış yollar %14-35 hızlanırken ilk çağrılar ve nesne oluşturma %39-64 yavaşladı.

En sert gerileme 11 RC'de: 50 alanlı POCO binding 61 µs'den 145 µs'ye, IOptionsSnapshot ise 52 µs'den 136 µs'ye çıktı. Suçlu, PR #126396 ile eklenen [ConfigurationIgnore] kontrolünün her özellik için her binding'de çalışması; o satır etkisizleştirilince süreler 10.0 seviyesine dönüyor. Issue #136759 açık, düzeltme PR'ı henüz merge edilmedi.

Gerçek dünyada kullanımı

  • IOptionsSnapshot kullanan yüksek trafikli bir ASP.NET Core API'sinde options'ın istek başına yeniden oluşma maliyetini ölçmek.
  • Konfigürasyonu 50+ alanlı POCO'ya bağlayan bir worker servisinde .NET 11'e geçmeden binding süresini ve allocation'ı kıyaslamak.
  • Soğuk başlatmanın kritik olduğu container veya Lambda iş yüklerinde ilk EF Core sorgusu ile provider build süresini izlemek.
  • Kendi kütüphanenizdeki sıcak metotları git log -L ile takip edip sürümler arası regresyonları commit seviyesinde bisect etmek.

Neden önemli

.NET 11'e geçerseniz reflection tabanlı configuration binding ve IOptionsSnapshot yaklaşık iki kat yavaşlayabilir; bu yolları production isteklerine ulaşmadan source generator veya IOptionsMonitor'a taşımak gerekiyor.

Bu özet, Habr C# (ru) ü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ü