【发布时间】:2015-11-03 02:51:38
【问题描述】:
我使用 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和Memory都不工作,程序也不工作了。
而且我也不能断点调试。
更新:
在我的代码中,我使用函数 ExporttoExcel 如下链接:http://mikesknowledgebase.azurewebsites.net/pages/CSharp/ExportToExcel.htm
当我删除这个功能时,程序可以正常工作。
我不知道为什么该函数会导致问题。
任何建议。谢谢。
【问题讨论】:
-
如何导出到excel?
-
1 MaxDOP 会发生什么?
-
您可以随时暂停程序,然后遍历线程/任务,并在每个线程/任务上检查其堆栈。很可能您可以通过这种方式找到一些共享方法,该方法可以同时使用,但并未设计为并发安全,或者您可以找到死锁的原因。如需进一步帮助,您必须提供对我们隐藏的代码。用水做饭是可以的,但你也需要一些配料:)。
-
通常你不能调试超出你项目代码范围的东西,即第三方库、与系统调用相关的代码等。另外创建 10k 条记录,比如说,它可能是excel速度很慢,但这就是缺少信息。只能按顺序运行吗?
-
@spender,使用 1 MaxDOP,它工作正常。一一处理日程。
标签: c# export-to-excel parallel.foreach