几天前我问了一个类似于这个的问题: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))
第一组代码是否使用对人类对象的引用,以便我能够在列表中存储更多对象?同样,第二组代码是否试图将整个人类对象存储到列表中?
答案 0 :(得分:3)
您的两个代码示例是等效的(假设您在创建它之后没有对human
变量执行任何其他操作)。 new
关键字会创建一个存储在列表中的引用 - 您只是在内联中创建该引用而不是将其存储在变量中。
假设Human
是class
而不是struct
,列表将包含对象的引用,而不是对象本身。
Human
对象的大小对您可以在列表中存储的引用数量的影响较小(整个系统内存可能更多是2GB .NET限制的问题)。
答案 1 :(得分:1)
两个代码示例都具有相同的效果。
两个示例都存储对对象的引用。
您可以在列表中存储多于1个或2个对象。
答案 2 :(得分:0)
这由.Net CLR和代码优化管理。在任一场景中都会更改您的代码以存储对人类对象的引用。这里唯一的区别是第一个示例有一个挂钩到本地方法的引用。