C# 通过Quartz调度作业是否比在线程运行时(真)性能更好

C# 通过Quartz调度作业是否比在线程运行时(真)性能更好,c#,.net,multithreading,quartz-scheduler,C#,.net,Multithreading,Quartz Scheduler,目前,我的应用程序有15个线程(彼此独立),其结构如下 while(true) { //do repeating work Thread.Sleep(x time); } 最近我学习了一点Quartz,我想知道使用while循环删除这些线程,并将“//重复工作”组织为Quartz作业,在最后递归地安排此作业的下一次调用,对性能是否更好和Thread.Sleep你会有很多线程,很多时间都会被阻塞(睡眠),如果某个线程现在不需要用于特定操作,那么它可以自由地执行另一个线程,这不是更

目前,我的应用程序有15个线程(彼此独立),其结构如下

while(true)
{
    //do repeating work
    Thread.Sleep(x time);
}
最近我学习了一点Quartz,我想知道使用while循环删除这些线程,并将“//重复工作”组织为Quartz作业,在最后递归地安排此作业的下一次调用,对性能是否更好和Thread.Sleep你会有很多线程,很多时间都会被阻塞(睡眠),如果某个线程现在不需要用于特定操作,那么它可以自由地执行另一个线程,这不是更好吗

你应该小心地使用你的线程,它们是你应用程序的昂贵资源

虽然我不确定Quartz内部是如何工作的,但我确信它不会无缘无故地阻塞大量线程,而且它将使您无需以高效的方式自行管理所有线程。

您可以将Quartz的使用情况与计时器的使用情况进行比较(计时器也不会无缘无故地阻塞线程),计时器还缺少一些其他优点:

  • 计时器没有持久性机制
  • 计时器不灵活 计划(只能设置开始时间和重复间隔,无 基于日期、时间等
  • 计时器不使用线程池 (每个计时器一个线程)
  • 计时器没有真正的管理方案-你会 必须编写自己的记忆、组织机制 并按名称等检索任务
如果您正在使用while(true)和Thread.Sleep,则取自

。您将有许多线程会被阻塞很多时间(Sleep),如果某些线程现在不需要用于特定操作,则可以自由执行另一个线程,这不是更好吗?

你应该小心使用你的线程,它们是你应用程序的昂贵资源!

虽然我不确定Quartz内部是如何工作的,但我确信它不会无缘无故地阻塞大量线程,而且它将使您无需以高效的方式自行管理所有线程。

您可以将Quartz的使用情况与计时器的使用情况进行比较(计时器也不会无缘无故地阻塞线程),计时器还缺少一些其他优点:

  • 计时器没有持久性机制
  • 计时器不灵活 计划(只能设置开始时间和重复间隔,无 基于日期、时间等
  • 计时器不使用线程池 (每个计时器一个线程)
  • 计时器没有真正的管理方案-你会 必须编写自己的记忆、组织机制 并按名称等检索任务

答案取决于应用程序的体系结构和“重复工作”的性质。使用线程有很多优点:您可以独立分派工作,而不需要额外的开销来管理任务队列,您可以为不同的线程分配不同的优先级,将它们标记为后台或前台等。简言之,您可以获得灵活性,以换取一些效率损失,这通常是可以做到的忽略15个线程


我的建议是:使用ManualResetEvent.WaitOne而不是Thread.Sleep-它允许您在应用程序停止或重新启动时立即向所有线程发出正确关闭的信号。

答案取决于应用程序的体系结构和“重复工作”的性质。使用线程有很多优点:您可以独立分派工作,而不需要额外的开销来管理任务队列,您可以为不同的线程分配不同的优先级,将它们标记为后台或前台等。简言之,您可以获得灵活性,以换取一些效率损失,这通常是可以做到的忽略15个线程


我的建议是:使用ManualResetEvent.WaitOne而不是Thread.Sleep-它允许您在应用程序停止或重新启动时立即向所有线程发出正确关闭的信号。

我写了while(true)“为了让它看起来更通用,它实际上是”while(!\u appExit)“where”\u appExit”“是布尔值,在退出之前会更改。它不是关于循环的退出,而是关于不等待睡眠结束。要使用while(谓词)立即关闭,您必须在短时间内睡眠,这可能会影响性能。另一方面,使用WaitOne,您可以在事件上升后立即“唤醒”。啊,好的,我现在明白了:)非常感谢你的提示:)我写了while(true)“为了让它看起来更通用,它实际上是”while(!\u appExit)”,其中“\u appExit”是布尔值,在退出之前更改它不是关于循环的逃逸,而是关于不等待睡眠结束。使用while(谓词)立即关闭您必须在短时间内睡眠,这可能会影响性能。另一方面,使用WaitOne,您可以在事件发生后立即“醒来”。啊,好的,我现在明白了:)非常感谢您的提示:)