偶然發現,遍歷vector時,使用兩種看上去沒什麼差別的方法,效能上卻有很大的差異。
#include #includeclass
cpoint;
int vectorread_0(const cpoint*arr, size_t size)
return
result;
}int vectorread_1(const vector&arr)
return
result;
}int vectorread_2(const vector&arr)
return
result;
}int vectorread_3(const vector&arr)
return
result;
}void
testvectorread()
start =::gettickcount();
result = 0
;
for (i = 0; i < nloopcount; i++)
end =::gettickcount();
cout
<< "
vectorread_0 takes:
"<< end - start << "
result:
"<< result
result = 0
;
for (i = 0; i < nloopcount; i++)
end =::gettickcount();
cout
<< "
vectorread_1 takes:
"<< end - start << "
result:
"<< result
result = 0
;
for (i = 0; i < nloopcount; i++)
end =::gettickcount();
cout
<< "
vectorread_2 takes:
"<< end - start << "
result:
"<< result
result = 0
;
for (i = 0; i < nloopcount; i++)
end =::gettickcount();
cout
<< "
vectorread_3 takes:
"<< end - start << "
result:
"<< result <}
執行結果(執行環境:thinkpad t430,vs2013):
vectorread_0 takes: 5663 result: -769903776
vectorread_1 takes: 0 result: -769903776
vectorread_2 takes: 0 result: -769903776
vectorread_3 takes: 0 result: -769903776
可見,vectorread_0效能非常糟糕,很可能編譯器對vector有特殊的優化。
另外,用同樣的方式測試了vector在寫入情況下的效能,幾種方法在效能上並沒有明顯差異。
map表遍歷性能
最近收到很多對資料庫查詢壓力過大的反饋,由於我的程式只是從資料庫讀取記錄,和進行緩衝 所以考慮通過延長應用程式內部的快取時間 增大快取量,使程式從快取中讀取資料,從而解決訪問資料庫過於頻繁的問題,從而降低資料庫讀取壓力。程式中的快取資料使用stl中的map表儲存,快取的資料量比較大,單個物件占用50...
js迴圈遍歷性能
定length for迴圈 有length 不定length for迴圈 使用陣列length 不定length for迴圈 判斷陣列length是否存在 foreach array自帶,對某些不適用例如 nodelist forof es6 mapforin 結論 普通for迴圈才是最優雅的 ps...
python效能對比
1 coding utf8 import datetime road nodes for i in range 5000000 road nodes i beg time datetime.datetime.now for key,val in road nodes.items pass end t...