MSDN 官方效能數據
- 裝箱耗時 ≈ 一般指派的 20 倍 (需配置新物件、複製值)。
- 拆箱耗時 ≈ 一般指派的 4 倍 (型別檢查 + 複製值)。
實務編程應盡量避免 裝箱/拆箱操作。
結構體裝箱實測
using System;
using System.Collections;
struct Person {
private string _name;
public Person(string name) { _name = name; }
public string Name { get { return _name; } set { _name = value; } }
}
class Test {
static void Main() {
ArrayList arr = new ArrayList();
Person p = new Person("張三");
arr.Add(p); // 發生裝箱:值型別 → object
p.Name = "李四";
Console.WriteLine(p.Name); // 李四 (原變數已修改)
Console.WriteLine(((Person)arr[0]).Name); // 張三 (盒子內副本未變)
}
}
ArrayList 僅接受 object,值型別加入必裝箱。
- 修改原變數 不影響 已裝箱副本,易造成邏輯錯誤。
- 解決:改用
List<Person> 泛型集合,完全避免裝箱。