usage - C#Tiempo de una función usando atributo
system attribute c# example (1)
Quiero cronometrar una función usando un atributo. Me gustaría hacer algo como esto:
[TimeIt]
public MyFunc()
{
//do something
...
return;
}
tras la ejecución de esta función, si el tiempo tomado por la función está por encima de un umbral, el atributo debe registrar la hora utilizando log4net.
Esto es similar a lo que hace el MVC ActionFilterAttribute, excepto que no quiero usar MVC.
Los atributos son (con algunas muy pocas excepciones, como [PrincipalPermission]
que es detectada por el propio tiempo de ejecución) solo metadatos; así que no hagas que el código adicional sea invocado mágicamente. La excepción a esto es a través de herramientas como PostSharp, que en el momento de la construcción localiza dichos atributos y los trama en código adicional.
En todos los demás casos, tendría que verificar este atributo usted mismo a través de la reflexión y escribir código para invocar los métodos adicionales de los atributos. Esto es lo que hace ASP.NET MVC; identifica una familia de atributos esperados y llama a los métodos de clase base para hacer que los filtros se activen.
Si está escribiendo un marco de plugin, esto podría tener sentido. Si es para instrumentación de métodos ad-hoc, esto no funcionará sin que usted agregue el código adicional.
Lo que podría ser más fácil es escribir un tipo IDisposable
que escriba el tiempo transcurrido cuando se disponga; entonces podrías hacer
using(new MyTimer("My label")) {
//... Your method
}
Tal vez un ligero abuso de using
pero debería funcionar.