【问题标题】:Is it possible to calculate the execution time of a method in C# with attributes?是否可以使用属性计算 C# 中方法的执行时间?
【发布时间】:2011-08-24 22:49:33
【问题描述】:

是否有 C# 属性(用于方法)来计算此方法的执行时间?还有其他方法吗?

【问题讨论】:

  • 这个问题毫无意义。属性仅在某些东西正在寻找它们时才起作用,这意味着您需要一些代码来检查属性然后执行某些操作。还有this one是什么?
  • 仅当您使用基于属性的代码重写器(例如 postsharp)时。
  • @Tejs 这可能没有意义,因为 OP 可能对属性是什么以及如何使用它们有误解。在这种情况下,你纠正他并帮助他,而不是给他反对票。而“这个”显然是指方法。
  • 我对这个问题投了反对票,因为他从未指定过这种方法是什么。例如,如果它是 MVC 中的一个动作方法,那么有既定的方法可以做到这一点。如果它是控制台应用程序中的随机方法,则解决方案不同。
  • Bastien 您是否找到任何解决方案来创建用于计算执行时间的属性?

标签: c# performance attributes


【解决方案1】:

您可以使用面向方面的编程来执行此操作。从 PostSharp 看这个例子:http://www.sharpcrafters.com/solutions/performance

这里的技巧是定义将在编译时注入代码的行为。一种用例是为您需要的方法添加时间。

【讨论】:

    【解决方案2】:

    还有其他方法: 您可以使用 VS Profiler 来检查特定方法执行了多少次以及执行了多长时间。

    或者您可以使用 Attributes 来分析性能的 3rd 方库,请参阅此相关主题 What Are Some Good .NET Profilers?

    【讨论】:

      【解决方案3】:

      您可以使用Timer,在函数调用之前启动它,然后在方法完成后停止它。然后把时间输出成一个更好的形式!

      如果您不想编写手动代码,请查看Visual Studio ProfilersSO - Best Profilers

      【讨论】:

      • 是的,最好的形式是解决您没有使用适当的分析器这一事实:_) see FAQ entry no. 5
      【解决方案4】:

      如果您想编写一些测试代码来分析各种功能或其部分,您可以使用System.Diagnostics.Stopwatch 来跟踪经过的时间。像这样:

      public void DoSomething(){
        Stopwatch stopWatch = new Stopwatch();
        stopWatch.Start();
      
        //stuff you want to time
      
        stopWatch.Stop();
      
        System.Console.Writeln(String.Format("Total Ticks: {0}", stopWatch.ElapsedTicks))
      }
      

      如果这是您想要做的更一般的事情(即找出程序的哪些部分很慢),那么请像其他一些答案所建议的那样使用分析器。

      【讨论】:

        【解决方案5】:

        简单的:

        1. 不要
        2. Use a profiler
        3. 对于生产测量,请使用Performance Counters

        【讨论】:

          【解决方案6】:

          类似这样的:

            var oldTime = DateTime.Now;
            //your code here
            var resultTimeSpan = DateTime.Now - oldTime;
          

          【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-12-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-11-03
          相关资源
          最近更新 更多