.NET秒表类别限制

.NET秒表类别限制,.net,windows,hardware-interface,stopwatch,.net,Windows,Hardware Interface,Stopwatch,这可能不是一个完全与.NET无关的问题。 我正在编写一个.NET应用程序来控制一些小工具。我定期(比如每500毫秒)向这个小工具发送命令。我一发出命令就开始计时。(.NET秒表类) 如果小工具在10毫秒内没有响应,我会再次发送命令。如果它确实有响应,我将通过发送更多命令并处理响应来继续监视gadget的状态 我有2个或3个秒表计时器并行运行,为这个小工具做其他事情 现在,我想监视和控制数千个这样的小工具(可能高达5000个)。如果我为一个小工具创建一个对象,我将看到10000到15000个并行运

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

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

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

现在,我想监视和控制数千个这样的小工具(可能高达5000个)。如果我为一个小工具创建一个对象,我将看到10000到15000个并行运行的秒表对象。我不知道秒表是如何工作的,但我认为它们依靠硬件定时器或类似的东西来记录时间


我的问题是,windows能同时处理这么多的秒表吗?

我建议重新考虑这种设计。首先,秒表只是按照它说的去做——它就像秒表一样。如果希望在特定的时间间隔触发事件,则需要查看各种计时器类


话虽如此,我还是建议大家在这些小工具上共享你的计时器。您会发现,如果您创建的单个调度程序使用的计时器较少,并且由调度程序管理小工具,那么一切都会执行得更好,并且可能更易于编写和理解。

秒表只不过是一个保存Windows API调用结果的变量
QueryPerformanceCounter()
,它在“运行”时没有开销。停止它会再次调用
QueryPerformanceCounter()
,这样性能应该可以。也就是说,我同意里德·科佩的观点,你需要重新思考你的设计。有了这么多的小玩意,我开始考虑一个设备驱动程序。

我想问题应该是你是否能处理很多定时器;你将浪费大量的时间只是阅读成千上万的计时器,而不做任何功能

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


但只要尝试一下;在一个循环中生成一个包含数千个实例的数组,启动它们,然后看看会发生什么。

想想全局队列,它包含小工具响应和一个或几个线程,这些线程查询队列并在需要时重新发送消息。它会表现得更好

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

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


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

您知道,我很好奇:如何将5000台设备连接到一台计算机?它们是菊花链!12个小工具连接到一个接口盒。每个框可以菊花链连接到其他4个框,以此类推。每个小工具在此层次结构中都有一个唯一的可寻址id。