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

C# Object References vs. Objects in a List

几天前我问了一个类似的问题:

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

场景:我有一个人 class,我正在尝试将其存储在列表中。 这两行代码有区别吗?

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

对比

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

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

这由 .Net CLR 和代码优化管理。在这两种情况下,您的代码都会更改以存储对人类对象的引用。这里唯一的区别是第一个示例有一个指向本地方法引用的挂钩。

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

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

Human 对象的大小对您可以在列表中存储多少引用的影响较小(总体系统内存可能比 2GB .NET 限制更重要)。

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

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

您将能够在列表中存储多于 1 或 2 个对象。