巢狀迴圈
long
strattime
=system
.nanotime
();for
(inti=
0;i<
10000000;i
++)}
long
endtime
=system
.nanotime
();system
.out
.println
("外大內小耗時:"+(
endtime
-strattime
));
應改為:
long
strattime
=system
.nanotime
();for
(inti=
0;i<10;
i++)
}long
endtime
=system
.nanotime
();system
.out
.println
("外小內大耗時:"
+(endtime
-strattime
));
兩者耗時對比:
外大內小耗時:200192114
外小內大耗時:97995997
我們可以通過結果看出優化後效能提公升了一倍,所以巢狀迴圈應該遵循「外小內大」的原則,這和你拷貝檔案的時候複製多個小檔案和負責少個大檔案的區別。
提取與迴圈無關的表示式
long
strattime
=system
.nanotime
();for
(inti=
0;i<
10000000;i
++)long
endtime
=system
.nanotime
();system
.out
.println
("未提取耗時:"
+(endtime
-strattime
));
應改為:
long
strattime
=system
.nanotime
();c=a
*b;for
(inti=
0;i<
10000000;i
++)long
endtime
=system
.nanotime
();system
.out
.println
("已提取耗時:"
+(endtime
-strattime
));
兩者耗時對比:
未提取耗時:45973050
已提取耗時:1955
**中的a*b運算和迴圈是無關的,所以我們應該把他放到迴圈的外面,避免重複計算,我們可以看到優化後的效能提公升了好幾個量級,這可是不容忽視的效率問題。
消除迴圈終止判斷時的方法呼叫
long
strattime
=system
.nanotime
();for
(inti=
0;i<
list
.size
();i
++)long
endtime
=system
.nanotime
();system
.out
.println
("未優化list耗時:"
+(endtime
-strattime
));
應改為:
long
strattime
=system
.nanotime
();int
size
=list
.size
();for
(inti=
0;i<
size;i
++)long
endtime
=system
.nanotime
();system
.out
.println
("優化list耗時:"
+(endtime
-strattime
));
兩者耗時對比:
未優化list耗時:27375
優化list耗時:2444
list.size()每次迴圈都會被執行一次,這無疑會影響程式的效能,所以應該將其放到迴圈外面,用乙個變數來代替,優化前後的對比也很明顯。
異常捕獲
long
strattime
=system
.nanotime
();for
(inti=
0;i<
10000000;i
++)catch
(exceptione)
}long
endtime
=system
.nanotime
();system
.out
.println
("在內部捕獲異常耗時:"
+(endtime
-strattime
));
應改為:
long
strattime
=system
.nanotime
();try
}catch
(exceptione)
long
endtime
=system
.nanotime
();system
.out
.println
("在外部捕獲異常耗時:"
+(endtime
-strattime
));
兩者耗時對比:
在內部捕獲異常耗時:12150142
在外部捕獲異常耗時:1955
捕獲異常是很耗資源的,所以不要把try catch放到迴圈內部,優化後同樣有好幾個數量級的提公升。
python優化迴圈 Python 優化迴圈
我希望優化一些由兩個巢狀迴圈組成的 python 我對numpy並不那麼熟悉,但據我所知,它應該能夠幫助我提高這項任務的效率.下面是我編寫的測試 它反映了實際 中發生的情況.目前使用numpy範圍和迭代器比通常的python更慢.我究竟做錯了什麼?這個問題的最佳解決方案是什麼?謝謝你的幫助!impo...
for迴圈優化
某些情況下我們可以不使用迴圈而達到迴圈求解的效果。這裡我想介紹一種for迴圈的優化。例項情況 已知變數n值,求i值 int sum 0,int i 0 while sum n sum i system.out.println i i 注 int sum 0,int i 1 while sum n s...
for迴圈優化
1.原 for int i 0 i 1000 i for int j 0 j 100 j for int k 0 k 10 k testfunction i,j,k 優化方案一 for int i 0 i 10 i for int j 0 j 100 j for int k 0 k 1000 k t...