可以在生产代码中使用秒表吗?

Adr*_*ian 74 c# system.diagnostics timer stopwatch

我需要一个准确的计时器,而DateTime.Now似乎不够准确.从我读到的描述中,System.Diagnostics.Stopwatch似乎正是我想要的.

但我有恐惧症.我对在实际生产代码中使用System.Diagnostics中的任何内容感到紧张.(我广泛使用Asserts和PrintLns等进行调试,但从未用于生产.)我不仅仅是尝试使用计时器来测试我的功能 - 我的应用程序需要一个实际的计时器.我在另一个论坛上看到System.Diagnostics.StopWatch仅用于基准测试,不应该在零售代码中使用,尽管没有给出理由.这是正确的,还是我(以及任何发布该建议的人)对System.Diagnostics过于封闭?即,在生产代码中使用System.Diagnostics.Stopwatch是否可以?谢谢阿德里安

Ste*_*nis 60

在引擎盖下,几乎所有的秒表都是包装 QueryPerformanceCounter.据我所知,秒表可以提供对高分辨率计时器的访问 - 如果你在生产代码中需要这个分辨率,我认为使用它没有任何问题.

  • 我们一直在生产代码中使用QueryPerformanceCounter.在生产中使用这种基础设施是完全合理的. (3认同)

Zac*_*son 23

是的,System.Diagnostics听起来只是用于调试,但不要让名字欺骗你.该System.Diagnostics命名空间似乎在生产中使用代码起初有点吓人探测(它确实对我来说),但也有很多在该命名空间中有用的东西.

有些东西,比如Process类,对于与系统交互很有用.有了Process.Start你可以启动其他应用程序,推出一个网站用户,打开一个文件或文件夹,等等.

其他的东西,比如Trace课程,可以帮助你追踪生产代码中的错误.当然,您不会总是在生产代码中使用它们,但它们对于记录和跟踪远程计算机上难以捉摸的错误非常有用.

不要担心这个名字.


Rem*_*anu 5

Afaik StopWatch 是QueryPerformanceCounter功能的外壳。该函数是许多性能计数器相关测量的基础。QPF 调用速度非常快并且非常安全。如果您对 Diagnostics 命名空间感到偏执,请直接调用 QPF。


Joh*_*ers 5

你说你已经在另一个论坛上读到不使用System.Diagnostics生产中的类.但是你应该担心的唯一来源是创建代码的微软.他们说StopWatch班级:

提供一组方法和属性,可用于准确测量经过的时间.

他们没有说,"除了生产".