TargetedPatchingOptOut: “Performans, NGen görüntü sınırları boyunca satır içi için kritik öneme sahip mi?”


140

Reflektör kullanarak bazı çerçeve sınıflarından geçiyor ve bazı yöntem ve özelliklerin aşağıdaki özelliğe sahip olduğunu fark ettim

[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]

Ben de yukarıdaki yorumu başka bir yerde görmüş ve asla takip eminim.

Birisi bana bunun C # ve başka bir bağlamda ne anlama geldiğini söyleyebilir misiniz?

Yanıtlar:


176

NGen'e, farklı bir montajda bile uygulandığı yöntemi satır içi yapmanın uygun olduğunu bildirir.

Örneğin:

  • String.Equals vardır [TargetedPatchingOptOut]
  • Çağıran bir program yazıyorsunuz String.Equals
  • Maksimum performans için bu programda NGen çalıştırıyorsunuz
  • NGen String.Equals, yöntem çağrısı talimatını yöntemdeki gerçek kodla değiştirerek çağrıyı satır içine alır .
    Yöntem çağrıları (biraz) pahalıdır, bu nedenle bu sık kullanılan yöntemler için bir performans artışıdır.

Ancak, Microsoft bir güvenlik açığı bulursa String.Equals, yalnızca güncelleştirilemez mscorlib.dll, çünkü bu sadece NGen'd olan montajı etkilemez. (Referans vermeden ham makine koduna sahip olduğundan String.Equals).
Bu gerçekleşirse, güvenlik güncelleştirmesinin NGen mağazasını temizleyeceğini varsayıyorum.

Bu özniteliğin yalnızca .NET Framework derlemelerinde yararlı olduğunu unutmayın. Kendinize ihtiyacınız yok. Bununla ilgili daha fazla bilgiyi burada bulabilirsiniz: https://stackoverflow.com/a/14982340/631802


18
Bu niteliği kendi çerçevelerimizde kullanabilir miyiz? Açık kaynak kütüphanem bundan faydalanacak bir çok matematik fonksiyonuna sahiptir ...
MattDavey

3
.NET çerçevesi yamalanmışsa, mevcut yerel görüntü dosyaları geçersiz kılınır ve yeniden oluşturulur (en azından benim anlayışım budur)
Motti

14
@MattDavey Hayır, bu özelliği kendi kodunuzda kullanmamalısınız. MSDN'de yazıldığı gibi : "Bu API, .NET Framework altyapısını destekler ve doğrudan kodunuzdan kullanılması amaçlanmamıştır." Bu öznitelik yalnızca hedeflenen yama kullanan montajları etkiler. Bazı kaynak bağlantıları ile daha uzun bir açıklama burada bulunabilir: stackoverflow.com/a/14982340/631802
cremor

25
Tüm kodumuzun montaj sınırları boyunca otomatik olarak satır içine alınabilmesi, bu özelliğin bizim için tamamen yararsız olduğu anlamına gelir , cevabında gerçekten belirtilmesi gerekir ...
BlueRaja - Danny Pflughoeft

4
@MattDavey Derleyiciye yöntemlerinizin mümkünse satır içine alınması gerektiğini bildirmek istiyorsanız,[MethodImpl(MethodImplOptions.AggressiveInlining)]
Temel
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.