当前位置: 首页 > 知识库问答 >
问题:

计算方法的执行时间

易研
2023-03-14

可能的重复:
如何测量函数的运行时间?

我有一种I/O计时方法,它将数据从一个位置复制到另一个位置。计算执行时间的最佳和最真实的方法是什么<代码>线程<代码>定时器<代码>秒表?还有其他解决方案吗?我想要最准确的,尽可能简短的。

共有3个答案

慕承允
2023-03-14

< code>StopWatch类寻找您的最佳解决方案。

Stopwatch sw = Stopwatch.StartNew();
DoSomeWork();
sw.Stop();

Console.WriteLine("Time taken: {0}ms", sw.Elapsed.TotalMilliseconds);

它还有一个名为Stopwatch.IsHighResolution的静态字段。当然,这是硬件和操作系统的问题。

指示计时器是否基于高分辨率性能计数器。

翟新
2023-03-14

根据个人经验,System.Diagnostics.Stopwatch类可以用来测量方法的执行时间,但是,小心:它并不完全准确!

考虑下面的例子:

Stopwatch sw;

for(int index = 0; index < 10; index++)
{
    sw = Stopwatch.StartNew();
    DoSomething();
    Console.WriteLine(sw.ElapsedMilliseconds);
}

sw.Stop();

示例结果

132ms
4ms
3ms
3ms
2ms
3ms
34ms
2ms
1ms
1ms

现在你在想。“那么,为什么第一次用了132毫秒,而其余时间明显更少呢?”

答案是秒表不能补偿.NET中的“背景噪声”活动,如JIT。因此,当您第一次运行方法时,.NET JIT会先运行它。将执行此操作所需的时间添加到执行时间。同样,其他因素也会导致执行时间变化。

您真正应该寻找的绝对准确性是性能分析!

请看以下内容:

RedGate ANTS性能分析器是一种商业产品,但产生非常准确的结果。-使用.NET评测提高应用程序的性能

下面是一篇关于分析的StackOverflow文章:-哪些是好的.NET分析程序?

我还写了一篇关于使用秒表进行性能分析的文章,您可能想看看.NET中的性能分析

司徒翼
2023-03-14

秒表就是为此目的而设计的,它是在 .NET 中测量时间执行的最佳方法之一。

var watch = System.Diagnostics.Stopwatch.StartNew();
// the code that you want to measure comes here
watch.Stop();
var elapsedMs = watch.ElapsedMilliseconds;

不要使用日期时间在 .NET 中测量时间执行。

更新:

正如@series0ne在评论部分所指出的:如果您想要真正精确地测量某些代码的执行,您将不得不使用内置于操作系统中的性能计数器。下面的回答包含了一个很好的概述。

 类似资料:
  • 本文向大家介绍Python执行时间的计算方法小结,包括了Python执行时间的计算方法小结的使用技巧和注意事项,需要的朋友参考一下 首先说一下我遇到的坑,生产上遇到的问题,我调度Python脚本执行并监控这个进程,python脚本运行时间远远大于python脚本中自己统计的程序执行时间。 监控python脚本执行的时间是36个小时,而python脚本中统计自己执行的时间是4个小时左右。 问题暴漏之

  • 本文向大家介绍asp.net计算每个页面执行时间的方法,包括了asp.net计算每个页面执行时间的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了asp.net计算每个页面执行时间的方法。分享给大家供大家参考。具体分析如下: 这里的asp.net代码可实现计算每个页面的执行时间,无需要修改页面的相关代码,这段代码会给所有的页面统一加上执行时间显示 希望本文所述对大家的asp.net程序

  • 本文向大家介绍C#计算程序执行过程花费时间的方法,包括了C#计算程序执行过程花费时间的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#计算程序执行过程花费时间的方法。分享给大家供大家参考。具体如下: 计算执行完程序花费的时间: 希望本文所述对大家的C#程序设计有所帮助。

  • 问题内容: 我想通过查看算法的运行时性能来测试哪种数据结构是最佳的,我该怎么做? 例如我已经有一个; 假设我有我的,我想知道下面的语句需要多长时间来执行:。 我该如何计时? 谢谢! 问题答案: 首先看一下我对这个问题的回答;它包含一个可移植的(windows/linux)函数,以毫秒为单位获取时间。 接下来,执行以下操作: 全做完了!(请注意,我没有尝试编译它)

  • 目前我正在为学校做一个项目,下面是要求: 编写一个Temperature类,它将保持以华氏为单位的温度,并提供获取以华氏、摄氏度和开尔文为单位的温度的方法。该类应具有以下字段: :保持华氏温度的倍增器。 该类应具有以下方法: :构造函数接受华氏温度(双倍)并将其存储在ftemp字段中。 :set Fahrenheit方法接受一个华氏温度(作为双值),并将其存储在ftemp字段中。 :返回ftemp

  • 有时候,能够知道一个计算执行消耗的时间是非常有意义的,尤其是在对比和基准测试中。最简单的一个办法就是在计算开始之前设置一个起始时候,再由计算结束时的结束时间,最后取出它们的差值,就是这个计算所消耗的时间。想要实现这样的做法,可以使用 time 包中的 Now() 和 Sub 函数: start := time.Now() longCalculation() end := time.Now() de