dr.*_*vil 6 .net optimization performance cpu-usage
我们的工具在诊断模式下生成性能日志,但是我们跟踪代码执行时间(秒表+毫秒)的性能.
显然它根本不可靠,测试系统的CPU可以被一些随机过程使用,如果你的工具配置为运行10个线程而不是2个,结果将完全不同,等等.
我的问题是:
找出一段代码(而不是整个过程)的正确CPU时间的正确方法是什么?
我的意思是CPU时间:
基本上CPU花了多少周期.我假设对于同一台计算机中的同一段代码,它将始终相同,并且不受其他进程的影响.我可能会在这里遗漏一些基本的东西,如果是这样,请在评论或答案中启发我.
PS在我们的设置中无法使用分析器
另一个更新,
为什么我不打算使用分析器
因为我们需要在具有不同数据的不同环境中测试代码,而我们没有分析器或IDE或类似的东西.因此代码本身应该处理它.一个极端的选择可能是使用分析器的DLL,但我不认为这个任务需要这么复杂的解决方案(假设没有免费且易于实现的分析库).
我认为对于同一台计算机中的同一段代码来说,这始终是相同的,并且不受其他进程的影响
这不是计算机的工作方式。代码很大程度上受到机器上运行的其他进程的影响。典型的 Windows 计算机大约有 1000 个活动线程,您可以在 Taskmgr.exe 的“性能”选项卡中看到该数字。它们中的绝大多数都处于睡眠状态,等待 Windows 发出的某种事件信号。然而,如果机器正在运行代码(包括您的代码),准备好运行并占用 CPU 时间,那么 Windows 将为它们分一杯羹。
这使得测量代码所花费的时间成为一种相当随意的测量。您唯一可以估计的是所花费的最短时间。通过运行测试数十次,您很有可能获得不受其他进程影响的样本。然而,这在现实生活中永远不会发生,明智的做法是采用中值作为实际的性能衡量标准。
唯一真正有用的衡量标准是衡量算法的增量改进。更改代码,看看中值时间如何因此而变化。