C# C语言中的时间基准装饰器#

C# C语言中的时间基准装饰器#,c#,.net,benchmarking,C#,.net,Benchmarking,我想(以一种优雅的方式)使用一些自定义方法属性,它将为我提供以下信息: 当我调用这样一个方法foo()时,在某些属性中,我将得到经过的时间(方法调用持续的时间) 我怎么能用C#做呢?反思 先谢谢你。 James在C#中无法截获普通的旧方法调用。要真正做到这一点,您必须发布(预)处理您的C#代码(如PostSharp) 或者,您可以编写一个基准测试方法,用lambda来计时一段代码,但这显然不是真正的装饰器。C#没有提供这种现成的方法。您有几个选择: 使用一些外部分析器(我认为更高版本的VS有一个

我想(以一种优雅的方式)使用一些自定义方法属性,它将为我提供以下信息:

当我调用这样一个方法foo()时,在某些属性中,我将得到经过的时间(方法调用持续的时间)

我怎么能用C#做呢?反思

先谢谢你。
James

在C#中无法截获普通的旧方法调用。要真正做到这一点,您必须发布(预)处理您的C#代码(如PostSharp)

或者,您可以编写一个基准测试方法,用lambda来计时一段代码,但这显然不是真正的装饰器。

C#没有提供这种现成的方法。您有几个选择:

  • 使用一些外部分析器(我认为更高版本的VS有一个集成的)
  • 使用AOP框架。例如,Postsharp在构建后的步骤中重写IL,以引入基于属性的prolog/epilog代码

  • 秒表课怎么了?我经常使用它来分析关键代码中的常规计时。如果这还不够,我将切换到ANTS(或dotTrace)。

    Action elegantBenchmark=(body)=>
    {
    var startTime=DateTime.Now;
    身体();
    Console.WriteLine(DateTime.Now-startTime);
    };
    优雅的基准(嫁妆);
    
    附言。
    PostSharp将按照您的要求完成工作。

    AOP很整洁。我真的需要玩这个。
    Action<Action> elegantBenchmark = (body) =>
    {
        var startTime = DateTime.Now;
        body();
        Console.WriteLine(DateTime.Now - startTime);
    };
    
    elegantBenchmark(DoWork);