C#

2010-12-18 11 views
16
özniteliğini kullanarak bir işlevi zamanlayın

Bir özniteliği kullanarak bir işlevi zamanlamak istiyorum. Böyle bir şey yapmak istiyorum:C#

Bu fonksiyonun yürütülmesi üzerine
[TimeIt] 
public MyFunc() 
{ 
//do something 
... 
return; 
} 

işlevi tarafından geçen süre bir eşiğin üstünde ise, nitelik Log4net kullanarak zamanı giriş yapmalıdır.

Bu, MVC'yi kullanmak istemedikçe MVC ActionFilterAttribute öğesinin yaptıklarına benzer.

+2

PostSharp tam da böyle bir şey yapmıyor - ne yazık ki ücretsiz değil: http://www.sharpcrafters.com/postsharp –

+0

Castle.DynamicProxy burada çalışır mı? Cevap olarak sunulmuyor çünkü bu gerçekten bir soru. – Amy

cevap

13

Öznitelikler (yalnızca çalışma zamanı tarafından tespit edilen [PrincipalPermission] gibi çok az istisna dışında) yalnızca yalnızca; Bu nedenle değil, sihirli olarak çağırmak için ek kod neden olur. Bunun istisnası, PostSharp gibi araçlarla'un yapım süresindeki kodları bu tür özniteliklerin yerini bulur ve ekstra kodlarla örer.

Diğer tüm durumlarda, yansıma yoluyla bu özniteliği kendiniz denetlemeniz ve özniteliklerden ek yöntemleri çağırmak için kod yazmanız gerekir. ASP.NET MVC'nin yaptığı şey budur; Beklenen bir özellikler ailesini tanımlar ve filtrelerinizin ateşlenmesine neden olmak için temel sınıf yöntemlerini çağırır.

Eklenti çerçevesi oluşturuyorsanız, bu mantıklı olabilir. Ad-hoc yöntem enstrümantasyon için ise - bu ekstra kod kendiniz eklemeden işe yaramaz. o kadar kolay yerleştirilir geçen süreyi yazar bir IDisposable türü yazıyor olabilir ne

; using ait

using(new MyTimer("My label")) { 
    //... Your method 
} 

Belki bir nebze kötüye ancak çalışması gerekir: o zaman yapabilirdi.

+0

Güzel özlü açıklama. –