Próbuję "wstrzyknąć" niestandardowe metody śledzenia w mojej aplikacji.Czas wykonywania metod śledzenia
Chcę, aby było tak elegancko, jak to możliwe, bez modyfikowania dużej części istniejącego kodu, i mieć możliwość łatwego włączania/wyłączania go.
Jednym z rozwiązań, które mógłbym wymyślić, byłoby stworzenie niestandardowego Attribute
, który dołączę do metod, które chcę śledzić.
podstawowa idea:
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
}
}
Czy są jakieś istniejące .NET
atrybuty, które zapewnia wywołania zwrotne, gdy metoda nazywa/skończyło?
Nie sądzę, żebym wiedział o żadnej. –
To, czego szukasz, to obszar programowania zorientowanego na aspekt. Istnieje biblioteka o nazwie [PostSharp] (https://www.postsharp.net/), która robi dokładnie to, co chcesz. Jeśli szukasz rozwiązań open source, zobacz post [this] (http://stackoverflow.com/questions/633710/what-is-the-best-implementation-for-aop-innet). –
Postsharp sprawi, że będzie to bardzo łatwe. Możesz nawet zastosować swoje aspekty w całym obszarze nazw poprzez AssemblyInfo.cs. Sprawdź to na stronie: https://www.postsharp.net/ –