之前一直認為因為List內部實現是數組,ToArray的實現只是將數組返回出去而已。
今天測了一下發現並不是那樣
var a = new List<int>(); for (int i = 0; i < 10000; i++) { a.Add(i); } DebugHelper.StartWatch(); foreach (var i in Enumerable.Range(0, 10000)) { a.ToArray(); } DebugHelper.StopWatch();
1萬數量大小的List,調用1萬次ToArray的時間消耗是417ms左右。
報著疑惑看了下源碼,沒想到它是把內部數組復制了一份再返回
public T[] ToArray() { T[] array = new T[this._size]; Array.Copy(this._items, 0, array, 0, this._size); return array; }
看來對於重復性操作,可以考慮直接緩存成全局變量,或者直接用List作為參數。