使用Parallel.ForEach时出现冻结问题

时间:2015-11-03 02:51:39

标签: c# export-to-excel 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中,我只是这样做:

  1. 创建大约10000条记录的数据表进行测试。

  2. 将数据表导出到excel 2007

  3. 保存到本地文件夹。

  4. 一开始,当我在详细信息中检查任务管理器时,我看到CPU和内存正在运行。

    但几分钟后,程序将冻结(作为样本图像) enter image description here

    CPU和内存都不起作用,程序不再起作用了。

    我也无法通过断点进行调试。

    更新

    在我的代码中,我使用函数ExporttoExcel作为以下链接:http://mikesknowledgebase.azurewebsites.net/pages/CSharp/ExportToExcel.htm

    当我删除此功能时,程序可以正常工作。

    我不知道为什么这个功能会导致这个问题。

    任何建议。感谢。

1 个答案:

答案 0 :(得分:1)

请注意,您使用的图书馆的作者注意到这一点:

将大量行(30,000+)写入Excel文件时也存在问题。当有太多数据要写时,OpenXML库似乎就会挂起。我还没有实现这个问题的解决方案。

作者指出,他解决了这个问题,但悬挂可能意味着,它仍然是问题,或者它可能并不意味着同时使用......