首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RDTSC与StopWatch

RDTSC与StopWatch
EN

Stack Overflow用户
提问于 2011-01-20 00:18:36
回答 2查看 1.2K关注 0票数 2

我编写了自己的字符串匹配算法,我想准确地测量它的时间,将其与其他算法进行比较,以检查我的实现是否更好。

我尝试过(StopWatch),但它在每次运行时给出不同的时间,因为Windows OS运行多个进程。我听说(RDTSC)可以得到消耗的周期数,但我不知道它是否在每次执行中也给出了不同的周期数?

请帮帮我,(RDTSC)能给出一个准确且相同的C#函数周期的度量吗,或者它类似于(StopWatch)?在没有其他正在运行的进程的情况下,单独获取C#函数的周期数的最佳方法是什么?非常感谢您的任何帮助或提示

EN

回答 2

Stack Overflow用户

发布于 2011-01-20 00:26:32

由于

操作系统有多个进程在运行,所以每次运行的时间都不同。

这是所有基准测试的本质。

好的基准测试通过统计手段来抵消这一点,例如,测量频率足以抵消来自其他运行程序的任何副作用。这就是我们要走的路。就精度而言,StopWatch对于基准测试来说已经足够了。

这需要做几件事(不涉及统计细节,我也不太擅长):

  1. 一个人应该持续足够长的时间来抵消测量方法引入的测量不精确(即使RDTSC也不是完全精确的),并抵消调用开销。毕竟,你想要测量你的算法,而不是运行测试循环和调用你的测试方法所花费的时间。
  2. 足够多的测试运行来对结果有信心:数据越多,你的statistic.
  3. Minimize外部影响,特别是系统偏差的健壮性就越强。也就是说,在相同的条件下,在同一台机器上运行所有测试,否则无法比较结果。完全没有。此外,如果您运行测试的多次运行(您应该这样做!)交替使用不同的方法。
票数 4
EN

Stack Overflow用户

发布于 2011-01-20 00:26:48

我认为为了获得最准确的信息,你应该使用GetThreadTimes():http://msdn.microsoft.com/en-us/library/ms683237%28v=vs.85%29.aspx在链接中有使用C#中函数的签名。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4737747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档