[英]Parallel.ForEach - First thread runs slower than the rest
這是一個奇怪的問題,我無法從搜索中找到太多有關的信息。
我有一個帶有視頻文件列表的listview控件。 我使用Parallel.ForEach運行單獨的線程來逐幀處理每個視頻文件以進行運動。 每個循環幀都包含一些調用,以更新我假設主線程(ID 1)處理的表單上的控件。
發生的情況是,要處理的第一個文件似乎要比其余文件花費更長的時間,實際上,在低分辨率視頻文件上,該線程完全掛起,而其余文件則放大了整個幀。 有時,該線程根本不會完成,而其余線程則通過其余文件運行。
我相信這可能是由於主線程被用於處理而被其他線程的調用所阻止。
編輯:我注意到打開另一個窗體時線程完全掛起。
這是該應用程序的屏幕截圖,顯示了第一個線程在其余線程之后運行
編碼
Parallel.ForEach<ListViewItem>(filesListView.Items.Cast<ListViewItem>(), new ParallelOptions() { MaxDegreeOfParallelism = Convert.ToInt32(Math.Ceiling((Environment.ProcessorCount * 0.75) * 1.0)) }, (item, state) =>
{
Thread.Sleep(100);
if (CallToStop == true)
{
state.Break();
}
internalProcessStart(item);
});
在評論中Henk Holterman的幫助下,我發現原因是由於應從UI線程調用Parallel.ForEach
時,應將其作為后台工作程序線程以保持UI線程空閑。
當我有正確的代碼使用我的代碼時,我將更新此答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.