我使用Parallel.ForEach作为样本时:冻结问题使用Parallel.ForEach
ParallelOptions parallelOpt = new ParallelOptions();
parallelOpt.MaxDegreeOfParallelism = 2;
Parallel.ForEach(list, parallelOpt, info =>
{
int threadID = Thread.CurrentThread.ManagedThreadId;
//use tmp var to avoid conflic with original var when using thread
ML_Scheduler tmp = new ML_Scheduler();
tmp = ObjectCopier.Clone<ML_Scheduler>(info);
Stopwatch sw1 = Stopwatch.StartNew();
logger.Info("\r\n\r\n");
logger.Info(string.Format("[{0}]****** Begin to schedule work with ThreadID {0} for ScheduleID {1}.", threadID, tmp.SchedulerID));
WorkWithEachSchedule(threadID, tmp, tmp.SchedulerID, dtNow, tmp.StartTime, false);
TimeSpan time1 = TimeSpan.FromSeconds(sw1.ElapsedMilliseconds/1000.0);
logger.Info(string.Format("[{0}]****** Finish to work with ThreadID {0} (during time : {1}).", threadID, time1.ToString(@"hh\:mm\:ss\:fff")));
}
);
在功能WorkWithEachSchedule,我只是做:
创建数据表与各地10000记录测试。
导出数据表到Excel 2007中
保存到本地文件夹。
在开始的时候,当我检查细节中的任务管理器时,我看到CPU和内存正在工作。
CPU和内存的两个不工作,程序不工作什么。
而且我也不能通过断点来调试。
更新:
在我的代码,我使用功能ExporttoExcel如下链接:http://mikesknowledgebase.azurewebsites.net/pages/CSharp/ExportToExcel.htm
当我删除此功能,该程序可以工作正确。
我不知道为什么这个功能会导致问题。
有任何建议。谢谢。
你怎么导出到Excel? – Backs
1 MaxDOP会发生什么情况? – spender
您可以随时暂停程序,然后通过线程/任务,并在每个人检查其堆栈。很可能你可以通过这种方式找到一些共享方法,它可以并发使用,但并不是设计为并发安全的,或者你可以找到死锁的原因。对于任何进一步的帮助,您将不得不提供对我们隐藏的代码。可以用水做饭,但是,你也需要一些食材:)。 – ipavlu