ArrayList与C#中内存分配的通用列表?

ArrayList与C#中内存分配的通用列表?,c#,C#,我想澄清关于ArrayList和Generic List的内存分配的概念,如果两者都是值类型,并且都是引用类型。任何一个hhp都能帮助清除吗?它们都是引用类型。唯一的区别是,ArrayList是弱类型的。存储在其中的int、bool等值类型被装箱到对象类型中。然后,当您在ArrayList中强制转换每个项目时,将其取消装箱 因为所有内容都被装箱到一个对象中,所以可以将不同类型的对象存储在数组列表中 泛型列表是强类型的,也就是说,它可以存储相同类型的对象。没有拳击,所以效率更高 装箱过程分配更多内

我想澄清关于ArrayList和Generic List的内存分配的概念,如果两者都是值类型,并且都是引用类型。任何一个hhp都能帮助清除吗?

它们都是引用类型。唯一的区别是,
ArrayList
是弱类型的。存储在其中的int、bool等值类型被装箱到
对象
类型中。然后,当您在
ArrayList
中强制转换每个项目时,将其取消装箱

因为所有内容都被装箱到一个对象中,所以可以将不同类型的对象存储在
数组列表中

泛型列表是强类型的,也就是说,它可以存储相同类型的对象。没有拳击,所以效率更高

装箱过程分配更多内存,将对象封装到弱类型
对象中

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

  • ArrayList
    是引用类型,但不是类型安全且效率较低
  • 列表
    或泛型列表是引用类型,但类型安全且高效
下面是关于引用类型的内存分配的SO post

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


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

您对内存分配的关注是什么?只是好奇。装箱只发生在值类型上,你的答案不是很清楚。数组列表在存储值类型时需要装箱,这就是为什么它会消耗更多内存并且不是纯粹的引用类型。是吗?ArrayList本身仍然是一个纯引用类型。