我使用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