整数のコレクションを作成する.NET1.0の方法(たとえば)は次のとおりです。
ArrayList list = new ArrayList();
list.Add(i); /* boxing */
int j = (int)list[0]; /* unboxing */
これを使用することのペナルティは、ボクシングとアンボクシングによる型の安全性とパフォーマンスの欠如です。
.NET 2.0の方法は、ジェネリックを使用することです。
List<int> list = new List<int>();
list.Add(i);
int j = list[0];
(私の理解では)ボクシングの代償は、ヒープ上にオブジェクトを作成し、スタックに割り当てられた整数を新しいオブジェクトにコピーし、その逆を行う必要があることです。
ジェネリックの使用はこれをどのように克服しますか?スタックに割り当てられた整数はスタックに残り、ヒープからポイントされますか(スコープから外れるとどうなるかという理由で、これは当てはまらないと思います)?スタックのどこかにコピーする必要があるようです。
本当に何が起こっているのですか?