簡體   English   中英

Parallel.ForEach-第一個線程的運行速度比其余線程慢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM