.NET - 将引用的变量添加到数组列表与将新的对象()添加到数组列表

本文关键字:添加 数组 列表 对象 引用 NET 变量 | 更新日期: 2023-09-27 17:55:29

我只是想知道当我执行以下操作时是否有任何性能差异(特别是内存使用情况)......

而不是做:

ArrayList array = new ArrayList();
object obj = new object();
for(int x = 0; x < 100; x++)
{
    array.Add(obj);
}

我这样做:

ArrayList array = new ArrayList();
for(int x = 0; x < 100; x++)
{
    array.Add(new object());
}

还是一模一样?

据我了解,系统在内存中保存对 obj 变量的引用,一旦方法完成,变量就会被释放并释放内存

那么,如果我在每个循环中调用ArrayList.Add(new Object()),那么没有内存分配给引用的变量?

.NET - 将引用的变量添加到数组列表与将新的对象()添加到数组列表

第一个在

数组的所有 100 个插槽中存储相同的对象引用。

第二个版本创建 100 个不同的对象,并将它们(对这些对象的引用)存储在数组中。

第一个:1 个对象,100 个引用
第二个:100个对象,100个引用?

这绝对不是一回事。

在第二种方法中,在每次迭代中,您将实例化一个新对象,该对象也需要它在内存中自己的空间。在第一种方法中,您始终引用内存中的相同对象。

因此,在内存分配方面存在很大差异。这是关于Java的,add方法以小写字母开头。当然,您应该参数化泛型类型ArrayList

扩展到 Gosu 答案,使用 fist 方法将对象添加到数组中将没有任何实际用途,因为如果您更改数组中任何对象的值,它将因引用类型而对所有 100 个项目进行更改。是的,Java和c#都是相同的