Ich habe einen PostSharp-Aspekt erstellt, der die Ausführungszeit jeder Methode, auf der ich sie verwende, protokollieren soll.Ungenaue Leistungsprotokollierung der asynchronen Methode mit StopWatch innerhalb von PostSharp MethodInterceptionAspect
Es scheint jedoch nicht zu funktionieren, wie ich erwartet hatte, mit sw.ElapsedMilliseconds
immer zwischen 0 und 3 Millisekunden.
[Serializable]
[AttributeUsage(AttributeTargets.Method)]
public sealed class PerfLogAttribute : MethodInterceptionAspect
{
public override void OnInvoke(MethodInterceptionArgs args)
{
var sw = new Stopwatch();
sw.Start();
args.Proceed();
sw.Stop();
log.Debug(sw.ElapsedMilliseconds);
}
}
es wie folgt aus:
[PerfLog]
public async Task<bool> DoSomethingAsync() {
// Adding a delay to test (or call database async)
await Task.Delay(5000);
return true;
}
Sind Sie sicher Postsharp funktioniert so mit async/erwarten? Es könnte nur bis zu "Warten auf Task.Delay (5000)" gemessen werden, ohne es einzuschließen. Googeln "PostSharp async MethodInterceptor" bringt einige Treffer, die relevant sein könnten. –