同步长时间运行流程的最佳实践是什么?

时间:2015-02-17 06:54:45

标签: asp.net

我正在研究一个监控项目,它通过SNMP监控不同的目标,包括(交换机,路由器,PC,...)在特定的时间间隔内(大多数是60秒)。根据要监控的元素数量,某些监控过程需要很长时间,可能超过30秒。当目标数量超过2000并且大部分监控操作需要很长时间时,问题就会出现。这种情况监视操作overlap.it是因为显然没有可用的线程来分配它们,而cpu有四个core.i尝试下面的选项。

我发现当监视器进入队列和它真正开始执行时之间存在差距。事实上,(startMonitoringOperation - startMonitoring)=大间隔 这个大型互动可能超过2分钟。 我想知道同步长时间运行过程的最佳实践是什么。如何减少我之前提到的差距。

     for (int I = 0 ;MonitorsQueue.Count;i++) 
    {
     Var startMonitoring = DateTime.Now;
   1.Threadpool.QueueUserWorkItem(new System.Threading.WaitCallback(DoMonitor),monitorObject);
   2.var task = new task(() => DoMonitor(monitorObject),TakeCreationOptions.LongRuning);
   3. var task = new task(() => DoMonitor(monitorObject));
}
Private void DoMonitor() //this Method take long in some occasions 
{
     Var startMonitoringOperation = DateTime.Now;
     //Monintoring Operation
}

1 个答案:

答案 0 :(得分:0)

这似乎是一个池大小的问题。将ThreadPool类中的线程数增加到3000以避免这种情况。但是,我建议您使用c#语言的async / await功能,而不是使用线程池来运行这样的线程,因为它们不是CPU密集型线程,而是等待I / O完成其工作。

通过使用async / await,在等待时间内不存在任何线程,这是您可以从中受益的。

祝你好运, 艾哈迈德