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