Pages

2009-06-07

List的Range操作效能超低

在某專案中,主要目標是對許多文件作「搜尋/插入/移除」
為了繞開文字編碼的判斷錯誤,我使用List<byte>來讀取檔案,
必須實作一個這樣的Method:
void Replace(byte[] oldArray, byte[] newArray, int startIndex, int count);

由於.NET中的List<>類別並沒有Replace函式,因此急將就使用:
List.Items.RemoveRange(startIndex, count);
List.Items.InsertRange(startIndex, count);

爾後發現這兩method做成的Replace()效能實在太差
在文件很大時作重複操作,甚至會造成DeadLock()的Exception問題。

使用使用Encoding.GetString()轉成字串,
再用字串的Replace()取替代,大大減少了效能損耗。
至於List的RemoveRange/InsertRange為何那麼損耗能,
可能得查看它的內部實作code才知道。

No comments: