1

我想澄清有关 ArrayList 与 Generic List 的内存分配的概念,如果两者都是值类型并且两者都是引用类型。任何人都可以帮助清除吗?

4

3 回答 3

2

内存使用的唯一区别是存储值类型时。ArrayList 必须将值装箱(复制)。一个装箱的值将放置在堆上,至少消耗一个额外的标头块(大约 20 个字节)。

但这仅在您存储数百万个项目时才有意义,而不是您一直在做的事情。

于 2012-09-26T18:06:55.740 回答
1

它们都是引用类型。唯一的区别是ArrayList弱类型。存储在其中的值类型(例如 int、bool 等)被装箱到object类型中。然后,当您将每个项目投射到ArrayList.

因为一切都被装箱到一个对象中,所以您可以将不同类型的对象存储在一个ArrayList.

Generic List 是强类型的,即它可以存储相同类型的对象。没有拳击,所以效率更高。

装箱过程分配更多的内存来将对象封装成弱类型object

如果您在 ArrayList 中仅存储引用类型的对象,则不使用装箱,而是使用另一种称为引用转换的机制。

于 2012-09-26T18:03:00.167 回答
0
  • ArrayList是引用类型,但不是类型安全且效率较低
  • List<T>或泛型列表是引用类型,但类型安全且高效

这是关于引用类型的内存分配的 SO 帖子 如何在 C# 中将内存分配给引用类型?

于 2012-09-26T18:04:53.557 回答