.NET 中的高分辨率计时器
我想对我的代码进行一些基本的分析,但发现 C# 中的 DateTime.Now 的分辨率只有大约 16 毫秒。 一定有我还没有找到的更好的时间保持结构。
I'd like to do some basic profiling of my code, but found that the DateTime.Now in C# only have a resolution of about 16 ms. There must be better time keeping constructs that I haven't yet found.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
这是一段用于计时操作的代码示例:
编辑:
巧妙的是它也可以恢复。
System.Diagnostics.Stopwatch 类将使用高- 分辨率计数器(如果您的系统上有)。
Here is a sample bit of code to time an operation:
EDIT:
And the neat thing is that it can resume as well.
The System.Diagnostics.Stopwatch class will use a high-resolution counter if one is available on your system.
System.Diagnostics.StopWatch 类非常适合分析。
以下是 Vance Morrison 的代码计时器博客的链接,如果您不想编写自己的测量函数。
The System.Diagnostics.StopWatch class is awesome for profiling.
Here is a link to Vance Morrison's Code Timer Blog if you don't want to write your own measurement functions.
对于最高分辨率的性能计数器,您可以使用底层 win32 性能计数器。
添加以下 P/Invoke 信号:
并使用以下方式调用它们:
将其全部转储到一个简单的类中,然后就可以开始了。 示例(假设类名称为 PerformanceCounters):
For highest resolution performance counters you can use the underlying win32 performance counters.
Add the following P/Invoke sigs:
And call them using:
Dump it all into a simple class and you're ready to go. Example (assuming a class name of PerformanceCounters):
您可以调用 Windows 中的高分辨率性能计数器。 该函数名称为kernel32.dll 中的QueryPerformanceCounter。
导入 C# 的语法:
Windows 调用的语法:
QueryPerformanceCounter @ MSDN
You could call down to the high-resolution performance counter in Windows. The function name is QueryPerformanceCounter in kernel32.dll.
Syntax for importing into C#:
Syntax for Windows call:
QueryPerformanceCounter @ MSDN