Rastreando o tempo de execução dos métodos

Estou tentando "injetar" métodos de rastreamento personalizados no meu aplicativo.

Quero torná-lo o mais elegante possível, sem modificar muito do código existente, e tenho a possibilidade de habilitá-lo / desabilitá-lo facilmente.

Uma solução que eu poderia pensar seria criar um personalizadoAttribute que eu anexarei aos métodos que eu quero rastrear.

Ideia básica:

public class MethodSnifferAttribute : Attribute
{
    private Stopwatch sw = null;

    public void BeforeExecution()
    {
        sw = new Stopwatch();
        sw.Start();
    }
    public void ExecutionEnd()
    {
        sw.Stop();
        LoggerManager.Logger.Log("Execution time: " + sw.ElapsedMilliseconds);
    }
}

public class MyClass
{
    [MethodSniffer]
    public void Function()
    {
        // do a long task
    }
}

Existe algum.NET atributos que fornecem retornos de chamada para quando um método é chamado / finalizado?

questionAnswers(2)

yourAnswerToTheQuestion