我讀過,如果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大約需要29ms,而且每個約3ms。但是第二次運行它和下一次,平行foreach需要0ms,foreach在2或3ms之間,比3多2次,但結果更穩定。
所以我的疑問是,爲什麼它第一次更慢,但後來更快?我是否應該考慮這一點,如果我將多次運行命令,儘管第一次運行速度較慢,如果下一次運行速度更快,是否值得平行使用?
我強烈懷疑這只是正常的JIT時間,因爲你測量的時間不是最優方式 - https://stackoverflow.com/questions/457605/how-to-measure-code-performance-in-net ...如果同意,請考慮關閉重複。 –