【问题标题】:.NET scheduler class architecture.NET 调度程序类架构
【发布时间】:2013-07-20 07:30:41
【问题描述】:

我们正在开发一个自定义调度程序类,它应该能够定期调用任务。

我们正在考虑两种可能的方法:

  1. 对于每个周期为 X 秒的任务,创建自己的计时器,其间隔等于任务的周期,或者

  2. 创建一个计时器,并在每个滴答声中重新计算其间隔,迭代所有任务并找到时间最接近的一个?

第一种方法似乎更简单直接,但我不知道创建 10 个或 20 个定时器是否昂贵。

您如何看待,从性能的角度来看,哪一个更好?

【问题讨论】:

  • 我们讨论了多少个任务,您希望它们能够同时运行吗? (您的第二种方法不允许这样做。)
  • 好吧,我们正在谈论一些糟糕的数十个任务。任务应该能够同时运行。当定时器的回调执行时间长,大于定时器间隔时,是否会发生下一个定时器滴答?
  • 我在 IScheduler 接口后面实现了不同的方法。在某些情况下,每 X 毫秒检查一次任务的简单计时器就足够了。
  • @MikhailBrinchuk:这取决于您所说的计时器类型。如果需要很长时间,您是否希望同时执行相同的回调多次?
  • 我想到了System.Threading.Timer,我确实希望回调同时执行多次。

标签: c# .net architecture scheduled-tasks


【解决方案1】:

使用 Quartz.net 等现有调度库怎么样?

Quartz.NET 是一个功能齐全的开源作业调度系统, 可用于从最小的应用程序到大型企业系统。 Quartz.NET 是一个用 C# 编写的纯 .NET 库,是非常 流行的开源 Java 作业调度框架,Quartz。这个 项目非常感谢原始Java项目,它的父亲詹姆斯 House 和项目贡献者。

http://quartznet.sourceforge.net/

【讨论】:

  • 怀疑在这种情况下,要求足够简单,以至于 BCL 中的 Timer 类之一就足够好了。
  • 我想过用这个库,但是我们的调度器不是我写的,这个人想完全自己实现。
猜你喜欢
  • 1970-01-01
  • 2017-06-04
  • 1970-01-01
  • 2011-08-12
  • 2011-03-24
  • 2014-05-23
  • 2017-02-20
  • 2016-01-17
  • 1970-01-01
相关资源
最近更新 更多