直接說結果,是有差別。證明try是會額外耗損資源。多少呢?少到你不會在乎,9億次只額外耗損不到19秒。平均使用一個try額外耗損0.000021毫秒(條件:未觸發catch)
建議:程式不要當機(crash)才是最重要的事,所以別因微不足道的耗損而刻意不使用或關閉。
當掉才是最該避免的事
提醒:只要跑進catch(異常發生)就一定會造成顯著的耗損。
提外話:在跑程式時,我有發現一個現象,先執行for迴圈的比較吃虧。所以測試時我有作對調,外加Release+Debug版。所以執行四次。
說明:
執行次數:各自執行9000000*100=9億次
時間單位毫秒
使用try | 未使用try | |
測試1 | 6225 | 620 |
測試2 | 10228 | 6120 |
測試3 | 6173 | 624 |
測試4 | 9908 | 6673 |
加總 | 32534 | 14037 |
記錄圖:
看不懂很正常,因為只是給我自己作記錄用。
程式碼:
private void 測試()
{
long T = 0;
long T2 = 0;
int A = 0;
string B = "";
System.Diagnostics.Stopwatch sw;
System.Threading.Thread.Sleep(2000);
for (int g = 1; g < 100; g++)
{
//無try
A = 0;
B = "";
sw = new System.Diagnostics.Stopwatch();
sw.Start();
for (int i = 0; i < 9000000; i++)
{
A = i % 13;
A += 1;
}
sw.Stop();
T2 += sw.ElapsedMilliseconds;
//有try
System.Threading.Thread.Sleep(1000);
A = 0;
B = "";
sw = new System.Diagnostics.Stopwatch();
sw.Start();
for (int i = 0; i < 9000000; i++)
{
try
{
A = i % 13;
A += 1;
}
catch (Exception ex)
{
B = ex.Message;
}
}
sw.Stop();
T += sw.ElapsedMilliseconds;
}
System.Threading.Thread.Sleep(1000);
for (int g = 1; g < 100; g++)
{
//有try
A = 0;
B = "";
sw = new System.Diagnostics.Stopwatch();
sw.Start();
for (int i = 0; i < 9000000; i++)
{
try
{
A = i % 13;
A += 1;
}
catch (Exception ex)
{
B = ex.Message;
}
}
sw.Stop();
T += sw.ElapsedMilliseconds;
//無try
A = 0;
B = "";
sw = new System.Diagnostics.Stopwatch();
sw.Start();
for (int i = 0; i < 9000000; i++)
{
A = i % 13;
A += 1;
}
sw.Stop();
T2 += sw.ElapsedMilliseconds;
}
txtMsg.AppendText(Environment.NewLine +"使用Try:" + T.ToString());
txtMsg.AppendText(Environment.NewLine + "未使用Try:" + T2.ToString());
}
沒有留言:
張貼留言