繁体   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