.NET秒表类限制

时间:2009-03-19 22:24:23

标签: .net windows hardware-interface stopwatch

这可能不完全不是.NET相关的问题。 我正在编写一个.NET应用程序来控制一些小工具。我定期向小工具发送命令(比如每500毫秒)。一旦我发送命令,我就会启动一个计时器。 (.NET秒表类)

如果小工具在10毫秒内没有响应,我会再次发送命令。如果确实响应,我会继续通过发送更多命令和处理响应来监控小工具状态。

我有2个或3个秒表计时器并行运行,为这个小工具做其他事情。

现在,我想监视和控制可能数以千计的这些小工具(可能高达5000)。如果我为小工具创建一个对象,我将查看并行运行的10000到15000个秒表对象。我不确定秒表是如何工作的,但我认为他们依靠硬件计时器或某些东西来跟踪时间。

我的问题是,Windows可以同时处理如此大量的秒表吗?

6 个答案:

答案 0 :(得分:8)

我建议重新考虑这个设计。首先,秒表只是做它所说的 - 它就像一个秒表。如果您希望以特定间隔触发事件,则需要查看各种Timer类。

话虽如此,我建议您在小工具中分享您的计时器。您会发现一切都表现得更好,如果您创建的单个调度程序使用的计时器更少,并且调度程序管理小工具,则编写和理解可能更简单。

答案 1 :(得分:7)

秒表只是一个包含Windows API调用QueryPerformanceCounter()结果的变量,它在“运行”时没有开销。停止再次呼叫QueryPerformanceCounter(),因此性能应该没问题。也就是说,我同意Reed Copsey,你需要重新考虑你的设计。有了这么多的小工具,我就开始考虑设备驱动程序了。

答案 2 :(得分:0)

我认为问题应该是你能处理多个计时器;你会浪费很多时间阅读数以千计的计时器并且没有任何功能。

我不知道秒表课程背后的实现,但我可以想象他们只是在开始和停止时再次读取计时器的值。因此,秒表实例可能几乎不需要任何资源。

但是试试看吧;在循环中生成一些thousend实例的数组,启动它们,看看会发生什么。

答案 3 :(得分:0)

考虑保存小工具响应的全局队列以及查询队列的一个或几个线程,并在需要时拒绝消息。它会表现得更好。

答案 4 :(得分:0)

使用一个时间源以指定的时间间隔安排事件

答案 5 :(得分:0)

秒表课很简单。它不是一直“运行”的东西。当你告诉它开始时,它会查看系统时间,当你告诉它暂停,停止,重置等时,只需查看每次执行此操作时的系统时间。询问ElapsedMilliseconds相当于说(Processor.CurrentTicks - StartTicks)/ TicksPerMillisecond。真的很简单。系统可以处理大量这些。

我没有评论这是否是适合您问题的设计,只是回答您的问题:系统可以毫无问题地处理数千个秒表。