使用 Parallel.ForEach 时出现冻结问题
Freeze issue when using 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 如下 link:http://mikesknowledgebase.azurewebsites.net/pages/CSharp/ExportToExcel.htm
当我删除这个功能时,程序可以正常工作。
我不知道为什么这个函数会导致这个问题。
任何建议。谢谢
请注意,您正在使用的库的作者注意到了这一点:
将大量行 (30,000+) 写入 Excel 文件时也会出现问题。当要写入的数据太多时,OpenXML 库似乎会挂起。我还没有实现这个问题的解决方案。
作者指出,他解决了这个问题,但挂起可能意味着它仍然是问题,或者可能不打算同时使用...
我使用 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 如下 link:http://mikesknowledgebase.azurewebsites.net/pages/CSharp/ExportToExcel.htm
当我删除这个功能时,程序可以正常工作。
我不知道为什么这个函数会导致这个问题。
任何建议。谢谢
请注意,您正在使用的库的作者注意到了这一点:
将大量行 (30,000+) 写入 Excel 文件时也会出现问题。当要写入的数据太多时,OpenXML 库似乎会挂起。我还没有实现这个问题的解决方案。
作者指出,他解决了这个问题,但挂起可能意味着它仍然是问题,或者可能不打算同时使用...