我們經常有對List和Dictionary列表進行復制、轉換等操作,在數據量較少時(幾萬以內)各種轉換速度不會被覺察,但是數據量很大時(百萬左右),各種轉換方式的性能就會體現出來。
本文檔將對列表轉換效率進行測試,最終得出效率較高的方法,指導今後軟件開發對技術的選擇。另外,本文還將對列表轉換過程中由另一線程修改列表數據時,是否會出現異常進行確認。
2013年5月16日星期四
1、在Dictionary轉Dictionary過程中由另一線程修改列表數據時,會出現異常。
2、采用Dictionary.ToDictionary()的方式速度很慢,100萬條需要249毫秒
3、采用Dictionary.Value.ToList的方式速度很快,100萬條數據僅32毫秒;
4、List.ToDictionary的方式速度需要109毫秒;
1)開發環境采用VS2008,C#程序,手動編寫代碼實現。
2)測試列表中包含100萬條數據。
1、方法:用兩個線程,一個線程負責Dictionary轉換,一個對列表進行修改。
結果:系統報錯,確實會出現異常。
2、詳細說明(詳情參見下方源代碼)
用線程函數TH_DicTest0()進行轉換操作,用線程函數TH_DicTest1()進行列表內容修改操作。
1、方法1:采用Dictionary.ToDictionary()的方式,
結果:16:44:08 標識:[ToDic時間] 運行時間為:249; 運行次數:1
2、方法2:采用Dictionary.Value.ToList,然後再List.ToDictionary的方式進行轉換;
結果:
1)Dictionary.Value.ToList的方式用時:
16:44:08 標識:[ToList時間] 運行時間為:32; 運行次數:1
2)List.ToDictionary的方式用時:
16:44:08 標識:[轉Dic時間] 運行時間為:109; 運行次數:1
View Code