如何获取执行特定方法时执行的所有方法的执行时间?

时间:2018-03-12 18:02:42

标签: c# postsharp

如何使用PostSharp获取在执行特定方法期间执行的所有方法的执行时间?

1 个答案:

答案 0 :(得分:1)

使用PostSharp时,通常会将方面直接应用于需要某些特定附加行为的方法。因此,为了测量方法的执行时间,您可以将分析方面应用于该方法。您可以在我们的示例网站上找到自定义性能分析方面的示例:PostSharp.Samples.Profiling

但我知道您需要测量从方面的目标方法调用的每个方法的执行时间。为此,您可以尝试实现方面提供程序,并使用PostSharp.Reflection.ReflectionSearch搜索类查找所有使用的方法。

[PSerializable]
public class ProfileProviderAttribute : MethodLevelAspect, IAspectProvider
{
    public IEnumerable<AspectInstance> ProvideAspects(object targetElement)
    {
        MethodBase targetMethod = (MethodBase) targetElement;
        foreach (var codeReference in ReflectionSearch.GetDeclarationsUsedByMethod(targetMethod))
        {
            if (codeReference.UsedDeclaration.MemberType == MemberTypes.Method)
            {
                yield return new AspectInstance(codeReference.UsedDeclaration, new ProfileAttribute());
            }
        }
    }
}