亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使循環中的第一次迭代與其余迭代速度相同

使循環中的第一次迭代與其余迭代速度相同

C#
守著星空守著你 2022-12-24 12:14:24
我正在嘗試對某些東西進行基準測試。我有一個循環for (int i = 1; i <= 1000; i++){    Thing thing = createThing(i);    DateTime startTime = DateTime.Now;    thing.ComputationallyExpensiveOp();    TimeSpan elapsed = DateTime.Now - startTime;    Console.WriteLine(String.Format("i = " + i + "\ttime = " + elapsed.TotalMilliseconds);}看起來第一次迭代i = 1花費的時間比它應該花費的時間長得多(幾個數量級),這取決于其他迭代需要多長時間才能完成。第二次迭代似乎也經常太長,盡管不那么明顯。我覺得這是因為循環導致緩存了很多值,這些值在第一次迭代中沒有設置。有沒有一種方法可以使第一次迭代i = 1與其余迭代一樣“快速”(在開銷方面),這樣我真的只是在計時(盡可能最好)thing.ComputationallyExpensiveOp()。目前很明顯,第一次迭代并不能準確反映thing.ComputationallyExpensiveOp().我已經嘗試在循環上方移動“預熱”初始化,但這沒有用。Thing thing = createThing(1);thing.ComputationallyExpensiveOp();for (int i = 1; i <= 1000; i++){    thing = createThing(i);    DateTime startTime = DateTime.Now;    thing.ComputationallyExpensiveOp();    TimeSpan elapsed = DateTime.Now - startTime;    Console.WriteLine(String.Format("i = " + i + "\ttime = " + elapsed.TotalMilliseconds);}
查看完整描述

2 回答

?
三國紛爭

TA貢獻1804條經驗 獲得超7個贊

for幾十年來我一直在使用這樣的循環。而且我從來沒有經歷過,這樣的for-loop 是第一次迭代期間延遲的原因。

我對你的實施一無所知Thing,但我很確定你延遲的原因就在那里。不在循環中。


查看完整回答
反對 回復 2022-12-24
?
臨摹微笑

TA貢獻1982條經驗 獲得超2個贊

將整個循環體復制到 “修復”之外為我


Thing thing = createThing(1);


DateTime startTime = DateTime.Now;

thing.ComputationallyExpensiveOp();

TimeSpan elapsed = DateTime.Now - startTime;


Console.WriteLine(String.Format("i = " + 1 + "\ttime = " + elapsed.TotalMilliseconds);


for (int i = 1; i <= 1000; i++)

{

    thing = createThing(i);


    startTime = DateTime.Now;

    thing.ComputationallyExpensiveOp();

    elapsed = DateTime.Now - startTime;


    Console.WriteLine(String.Format("i = " + i + "\ttime = " + elapsed.TotalMilliseconds);

}

我不太確定原因,但現在第一次迭代的運行時間更符合預期。


查看完整回答
反對 回復 2022-12-24
  • 2 回答
  • 0 關注
  • 95 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號