【发布时间】:2023-03-05 15:08:01
【问题描述】:
我已经读过,如果 foreach 非常简单,那么我使用并行 foreach 获得的开销不值得。所以我有一个简单的 WPF 应用程序来做一些测试。我有这个代码:
//Parallel.Foreach
txtLog.Text = txtLog.Text + "\r\n\r\n\r\nSe inicia el Parallel.Foreach a " + DateTime.Now;
miSw.Restart();
Parallel.ForEach(miLstInt,
(iteradorInt, state) =>
{
if (iteradorInt >= 500000)
{
state.Stop();
}
});
miSw.Stop();
txtLog.Text = txtLog.Text + "\r\nTiempo total del Parallel.Foreach: " + miSw.ElapsedMilliseconds.ToString();
//Forech
txtLog.Text = txtLog.Text + "\r\n\r\nSe inicia el foreach a " + DateTime.Now;
miSw.Restart();
foreach (int i in miLstInt)
{
if (i >= 500000)
{
break;
}
}
miSw.Stop();
txtLog.Text = txtLog.Text + "\r\nTiempo total del foreach: " + miSw.ElapsedMilliseconds.ToString();
我有一个按钮,当我单击它时,它会运行两个 foreach 并在文本框中显示结果。
当我第一次运行时,并行 foreach 大约需要 29 毫秒,而 foreach 大约需要 3 毫秒。但是我第二次运行它,下一次,并行foreach需要0ms,foreach在2或3ms之间,3比2多,但结果更稳定。
所以我的疑问是,为什么第一次更慢但后来更快?我是否需要考虑这一点,如果我将多次运行命令,虽然第一次较慢,但如果下一次会更快,是否值得并行 foreach?
【问题讨论】:
-
我强烈怀疑这只是常规的 JIT 时间,因为您以非最佳方式测量时间 - stackoverflow.com/questions/457605/…... 如果同意,请考虑关闭为重复。
标签: c# task-parallel-library parallel.foreach