|
|
1
67
使用秒表类。在msdn上有一个很好的例子: http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.aspx
|
|
|
2
85
环境.tickcount 基于 GetTickCount() winapi函数。以毫秒为单位 但是它的实际精度大约是15.6毫秒,所以你不能测量更短的时间间隔(否则你会得到0)。 注: 返回值为Int32,因此此计数器每49.7天滚动一次。你不应该用它来测量这么长的间隔。 日期时间 基于 GetSystemTimeAsFileTime ()winapi函数。它在100纳秒(十分之一微秒)内。 datetime.ticks的实际精度取决于系统。在xp上,系统时钟的增量约为15.6 ms,与environment.tickcount中相同。 在Windows7上,它的精度是1毫秒(而environment.tickcount的精度仍然是15.6毫秒),但是如果使用节能方案(通常在笔记本电脑上),它也可以下降到15.6毫秒。 秒表 基于 QueryPerformanceCounter() winapi函数(但如果系统不支持高分辨率性能计数器,则使用datetime.ticks) 使用秒表前,请注意两个问题: 您可以通过简单的测试来评估系统的精度:
|
|
|
3
24
你为什么担心翻车?只要测量的持续时间在24.9天以内,并计算 相对的 持续时间,你很好。无论系统运行了多长时间,只要您只关心自己在运行时间中所占的比例(而不是直接在开始点和结束点上执行小于或大于比较),这都无关紧要。即:
正确打印:
你不必担心这个标志位。C,就像C一样,让CPU处理这个问题。 这是我以前在嵌入式系统中遇到过的一种常见情况,需要计算时间。例如,我永远不会直接比较滚动前后。我总是执行减法来查找考虑滚动的持续时间,然后根据持续时间进行任何其他计算。 |
|
|
4
10
你可能想要
|
|
|
5
9
如果你在寻找
|
|
|
6
8
使用
它有一个名为
|
|
|
7
5
environment.tickcount似乎比其他解决方案快得多:
测量结果由以下代码生成:
|
|
|
8
5
以下是更新和更新的摘要,总结了此线程中最有用的答案和评论+额外的基准和变体: 第一件事:正如其他人在评论中指出的那样,在过去的几年里,事情发生了变化,随着“现代”Windows(Win XP++)和.NET,以及现代硬件的发展,没有或几乎没有理由不使用秒表()。 见 MSDN 详情。引文:
但是,如果您不需要秒表()的精度,或者至少想确切了解秒表的性能(静态与基于实例)以及其他可能的变体,请继续阅读: 我从cskwg接管了上面的基准测试,并扩展了更多变体的代码。我用一些年前的i7 4700 mq和c_7(更精确地说,用.NET 4.5.2编译,尽管使用了二进制文本,但它是c_6(用于字符串文本和“使用静态”)。尤其是秒表()的性能似乎比上面提到的基准有所提高。 这是一个循环中1000万次重复结果的例子,和往常一样,绝对值并不重要,但即使相对值在其他硬件上也可能不同: 32位,无优化的释放模式:
32位,释放模式,优化:
64位,无优化的释放模式:
64位,释放模式,优化:
这可能很有趣,因为 创建一个日期时间值来打印秒表时间似乎几乎没有成本 . 有趣的是,静态秒表比实际更快(如预期)。一些优化点非常有趣。 例如,我无法解释为什么只有32位的stopwatch.elapsedmilliseconds与其他变量(例如静态变量)相比如此之慢。现在,它的速度是64位的两倍多。 你可以看到:只有数百万人被处决,秒表的时间才变得重要。如果真的是这样(但要注意微观优化太早),使用gettickCount64()可能会很有趣,但尤其是使用 数据处理程序 ,你有一个64位(长)计时器,它的精度比秒表要低,但速度要快,这样你就不必在32位的“丑陋”环境中纠结了。 如预期的那样,datetime.now是迄今为止最慢的。 如果您运行它,代码还会检索您当前的秒表精度等等。 以下是完整的基准代码:
[…]
|
|
|
9
0
你应该使用 Stopwatch 而不是上课。 |
|
|
10
0
我使用environment.tickcount是因为:
也就是说,如果你有秒表的话,我还建议你使用它。或者你可以花1分钟写一个类似秒表的类来包装environment.tickcount。 顺便说一句,我在秒表文档中没有看到提到底层计时器机制的环绕问题,所以我不会惊讶地发现秒表也有同样的问题。但是,我不会花任何时间去担心它。 |
|
|
11
0
我本来想说把它包装成秒表课的,但格里泽尼奥已经说了正确的话,所以我会给他加薪。这样的封装因素决定了哪种方式更好,而且这会随着时间的推移而改变。我记得,在某些系统上花了这么多时间让我震惊,所以有一个地方可以实现最好的技术可能非常重要。 |
|
|
12
0
对于一次性计时,写起来更简单
我想,在滴答声中不太可能被大规模包围的情况对秒表来说更不重要,因为经过的滴答声场很长。在我的机器上,秒表是高分辨率的,每秒2.4e9滴答。即使以这样的速度,也要花121年的时间才能让虱子满地开花。当然,我不知道盖子下面发生了什么,所以拿着一粒盐。然而,我注意到秒表的文档甚至没有提到环绕式问题,而滴答计数的文档则提到了。 |
|
|
malife89 · 将java中的字符串读取为正确的日期格式 1 年前 |
|
|
Jas Mahay · 使用日期和日历:需要社区帮助来提高工作表的效率 1 年前 |
|
|
ViSa · 如何从Pandas的列中提取日期? 1 年前 |
|
|
Wolfspirit · 你如何确定一个时间点是否在一个时间段内? 1 年前 |
|
Steven · Python的美国/纽约时间偏移显示-04:56 1 年前 |