代码之家  ›  专栏  ›  技术社区  ›  tster

我可以创建多少System.Timers.Timer实例?我可以缩放多远?

  •  6
  • tster  · 技术社区  · 15 年前

    我有一份利用 System.Timers.Timer 对象执行过期和电子邮件通知等。目前,该系统一次有几百个计时器,但我们将扩大应用程序的使用范围,这个数字可能会扩展到数千个(可能不超过10000个)。

    我找不到任何关于增加计时器数量的信息,所以我认为这不会是一个问题。有人知道这是否会成为一个问题,我应该积极地改变我处理到期的方式吗?

    4 回复  |  直到 13 年前
        1
  •  11
  •   Jim Mischel    14 年前

    我知道这有点晚了,但是。…

    System.Timers.Timer 是包装纸吗 System.Threading.Timer ,这反过来又是围绕Windows的.NET包装。 Timer Queues . 计时器队列计时器非常轻——使用很少的系统资源。我没有按比例缩放到数千个计时器,但数百个计时器工作正常。从我对实现所知甚少的情况来看,我无法想象数千个计时器会有任何问题。

    在任何特定的计时器队列中,您可以拥有的计时器的数量可能有一些限制。我不知道那个限度是什么。当我一年左右调查这些计时器时,它看起来像是.NET框架为每个进程创建了一个计时器队列(或者可能是每个应用程序域创建的),并且您创建的所有计时器都被放入该队列中。

    通过创建自己的系统(使用单个计时器和某种类型的优先级队列机制来控制下一步的内容),复制计时器队列功能可能没有意义。这就是计时器队列已经为您所做的。

    似乎您可以轻松地构建一个创建10000个计时器的测试程序。将每一个设置为在最后一个后一秒钟内打勾,并将其周期设置为10000秒。然后坐下来,看着它滴答作响。或者让你的程序跟踪下一个应该勾选的人和下一个实际勾选的人。

        2
  •  0
  •   pdiddy    15 年前

    只用一个定时器怎么样?计时器将在第一个到期时过期,并在到期时执行适当的逻辑。然后将间隔时间重置为下一个到期时间?也许是另一种只使用一个计时器处理过期的方法。

        3
  •  0
  •   GregC Benjamin Baumann    15 年前

    如果您感兴趣,请查看Timer类通过在系统DLL上使用Reflector所依赖的基本OS资源。

    然后向马克·鲁辛诺维奇提出问题 http://blogs.technet.com/b/markrussinovich/

        4
  •  0
  •   user438034    14 年前

    你应该可以大量使用它们。但正如PDIDDY所说,如果可以的话,您真的应该考虑更改代码。1比10000的计时器有区别。;-)