不同时刻的节目时间

时间:2013-03-28 06:08:43

标签: c# windows algorithm time

我刚刚完成了一个项目,但我的老师提出了一个问题。为什么我的程序(具有相同的算法,相同的数据,相同的环境)在不同时刻以不同的完成时间运行。 任何人都可以帮助我吗?

示例:现在我的程序运行1.03秒。 但它会运行1.05秒(有时会更快1.01)。

5 个答案:

答案 0 :(得分:2)

之所以发生这种情况,是因为您的程序不是系统中唯一执行的实体,并且不会立即获得所有资源。

由于这个原因,测量较短的执行时间实际上没什么价值,因为它们会发生很明显的变化。相反,如果您对更准确的时间测量感兴趣,则应多次执行代码并计算所有运行的平均时间。

答案 1 :(得分:1)

因为Windows不是实时操作系统。执行程序时可能会发生许多其他活动,并且cpu可以与其他正在运行的进程共享其循环。如果您的程序需要从物理设备读取磁盘(数据库)和网络,时间可以更改:这是因为物理资源可能忙于为其他请求提供服务。内存也可以改变,如果有page faults,那么你的应用程序需要从虚拟内存中读取页面,因此你会看到性能下降。由于你使用C#,时间可以在同一个进程中从第一次执行变为合理的时间,因为代码是JITtted,即从第一次看到的中间代码到汇编编译,然后它在汇编形式中使用,速度要快得多。

答案 2 :(得分:1)

这很容易。您使用计数器捕获系统时差,因为它使用系统资源时不精确。有更多程序与您的程序并行运行,有些程序优先于您的代码导致临时(约20毫秒,取决于操作系统设置)暂停您的线程。即使在DOS中,也存在与您的准并行运行的代码,因为只有一个可能的线程,您的代码在时间仍在滴答时停止(它由该代码控制)。

答案 3 :(得分:1)

这里只是一个想法,但可能是因为内存使用的变化,后台应用程序在不同时间的cpu使用情况发生了变化。我的意思是时差只会产生差异;

  • 其他应用程序的内存使用情况
  • cpu热等物理条件。 (时间的变化非常小)
  • 和系统时钟。如果您执行随机数生成或在后台执行任何使用系统时钟的操作可能会创建该更改。

希望这会有所帮助。 欢呼声。

答案 4 :(得分:0)

假设是错误的。环境不会保持不变。您的程序的可用资源取决于许多事情。例如。其他进程的CPU和内存利用率,例如后台进程。由于其他进程导致的硬盘和/或网络利用率。即使没有其他进程运行您的程序也会改变缓存的内部状态。

在“现实世界”的表演场景中,在“热身”之后看到+/- 20%的波动并不罕见。即:连续测量10次为“预热”并丢弃结果。测量10倍以上并收集结果。 - > +/- 20%是很常见的。如果你没有热身,你可能会因为“冷”缓存而看到几个数量级的差异。

结论:您的程序非常小并且使用的资源非常少,并且不会受益于持久的缓存机制。