Araçlar

PostSharp 2027.0'da advice parameter binding ile aspect'ler boxing olmadan çalışır

PostSharp 2027.0 ile advice parameter binding herkese açık hale geldi: aspect advice'ları artık MethodExecutionArgs yerine tipli parametreler alıyor. Bu sayede sıcak yollarda çağrı başına heap tahsisi, boxing ve cast maliyetleri ortadan kalkıyor. Bağlamalar derleme zamanında denetlendiği için hatalar üretime değil build'e düşüyor.

Metalama / PostSharp Blog Gaël Fraiteur
Yayın tarihi
Okuma süresi
7 dk okuma
agent çalıştırması #10
agent çalıştırması #10
Orijinale git postsharp.net

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

  • MethodLevelAspect'ten türeyin ve override'ları [OnMethodEntryAdvice] gibi attribute'larla işaretli advice metotlarına çevirin.
  • [State( StateScope.MethodInvocation )] MethodExecutionTag'in yerini alır; tipli değişken olduğu için cast gerekmez.
  • Generic T parametresindeki [ReturnValue] boxing yapmaz; PostSharp T'yi her hedef metot için ayrı çıkarır.
  • [DeclarationName] değeri build sırasında hesaplanır, çalışma zamanında reflection çağrısı yapılmaz.
  • Bağlama uyumsuzlukları LA0220 ve LA0225 gibi build hatası olarak tüm aspect için bir seferde raporlanır.
  • Olay, alan, parametre, OnInvokeAsync ve yield değeri aspect'leri hâlâ AdviceArgs imzasını kullanmalı.

PostSharp 2027.0 ile advice parameter binding herkese açık, belgelenmiş ve derleme zamanında denetlenen bir özellik oldu. Şimdiye kadar OnMethodBoundaryAspect tabanlı bir aspect her çağrıda bir MethodExecutionArgs nesnesi alıyordu; bu da heap tahsisi, argümanlar ve dönüş değeri için boxing, tag için ise cast anlamına geliyordu. Yeni modelde aspect MethodLevelAspect'ten türer ve her advice yalnızca ihtiyaç duyduğu tipli değerleri parametre olarak alır: metot adı, çağrıya özel State değişkeni, dönüş değeri ya da istisna gibi.

Bu, sıcak yollardaki aspect'lerin çalışma zamanı maliyetini mantıklarını yeniden yazmadan büyük ölçüde düşürebileceği anlamına geliyor. Olay, alan ve parametre doğrulama aspect'leri, iterator yield değerleri ve OnInvokeAsync henüz bu modeli desteklemiyor; bunlar eski imzayı kullanmaya devam edebilir. Uyumsuz bağlamalar ise üretimde değil, build sırasında LA kodlu hatalarla fark ediliyor.

Gerçek dünyada kullanımı

  • Yüksek trafikli bir istek işleyicisinde çağrı başına tahsis yapmayan bir logging aspect'i.
  • Bir servis metodunu süreleyen ve Stopwatch'ı [State] ile advice'lar arasında paylaşan profiling aspect'i.
  • Her hedef metodun tam dönüş tipine ihtiyaç duyan generic bir retry ya da cache aspect'i.

Neden önemli

Sıcak yoldaki aspect'ler çağrı başına tahsis ve boxing maliyetinden kurtulabilir; yanlış bağlamalar da üretime çıkmadan build hatasına dönüşür. Olay ve OnInvokeAsync aspect'leri şimdilik eski modelde kalmalı.

Bu özet, Metalama / PostSharp 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ü