C#对象引用与列表中的对象

时间:2015-07-08 14:13:22

标签: c# list pointers object reference

几天前我问了一个类似于这个的问题:C# Does an array of objects store the pointers of said objects?

现在,我要问的是与代码相关的更多内容。简要概述,我正在尝试将许多对象存储到列表中,并且所述对象可能非常大(1~2 GB)。根据我的研究,.NET数据结构只有2 GB的内存。所以我的问题是,我能够将超过1或2个对象放入列表中吗?

场景:我有一个人类,我正试图将它存储在一个列表中。 这两行代码是不同的吗?

List<Human> humanList = new List<Human>();
Human human = new Human(attr1, attr2, attr3);
humanList.Add(human)

VS

List<Human> humanList = new List<Human>();
humanList.Add(new Human(attr1, attr2, attr3))

第一组代码是否使用对人类对象的引用,以便我能够在列表中存储更多对象?同样,第二组代码是否试图将整个人类对象存储到列表中?

3 个答案:

答案 0 :(得分:3)

您的两个代码示例是等效的(假设您在创建它之后没有对human变量执行任何其他操作)。 new关键字会创建一个存储在列表中的引用 - 您只是在内联中创建该引用而不是将其存储在变量中。

假设Humanclass而不是struct,列表将包含对象的引用,而不是对象本身。

Human对象的大小对您可以在列表中存储的引用数量的影响较小(整个系统内存可能更多是2GB .NET限制的问题)。

答案 1 :(得分:1)

两个代码示例都具有相同的效果。

两个示例都存储对对象的引用。

您可以在列表中存储多于1个或2个对象。

答案 2 :(得分:0)

这由.Net CLR和代码优化管理。在任一场景中都会更改您的代码以存储对人类对象的引用。这里唯一的区别是第一个示例有一个挂钩到本地方法的引用。