我有问题。我想使用Parallel.For循环,它应该花费15秒。
例如:
AForge.Parallel.For(0, 2, delegate(int i)
{
if (i == 0)
{
resim.Morphology(MorphologyMethod.HitAndMiss, kernel1);
resim.Write("sag.bmp");
label2.Text = DateTime.Now.ToString();
}
else if (i == 1)
{
resim2.Morphology(MorphologyMethod.HitAndMiss, kernel2);
resim2.Write("sol.bmp");
label3.Text = DateTime.Now.ToString();
}
});
如果我不使用并行,则需要30秒。如果我使用并行,它应该花费15秒,但Parallel.For不起作用。当我使用并行时花费30秒。我不明白。
答案 0 :(得分:0)
一个问题是您无法从非UI线程访问GUI控件(label2和lable3)。这会生成Exception
。尝试删除这两行,看看会发生什么。
此外,由于AForge是CPU密集型的,因此您需要在具有多个CPU的计算机上进行测试。
感谢Aron
这将强制任务在不同的线程上运行。
var t1 = Task.Run(() =>
{
resim.Morphology(MorphologyMethod.HitAndMiss, kernel1);
resim.Write("sag.bmp");
});
var t2 = Task.Run(() =>
{
resim.Morphology(MorphologyMethod.HitAndMiss, kernel2);
resim.Write("sol.bmp");
});
Task.WaitAll(new Task[] { t1, t2 });
答案 1 :(得分:0)