C# 存储同一个列表两次的内存使用情况,按不同的标准排序?

C# 存储同一个列表两次的内存使用情况,按不同的标准排序?,c#,list,C#,List,这是一个理论上的例子,但希望它能突出我的问题: 假设我有一个Item对象的主列表,Item有两个属性,比如Weight和Value 该程序通常需要按重量排序,并获取最轻的项目,而在其他地方则需要按值排序,并获取最昂贵的项目 主列表可能非常大,因此反复排序主列表将是大量不必要的工作。为了节省时间,是否可以将排序结果存储为自己的列表?这些其他列表是否只存储指向真实对象的指针,而不只是再次存储它们 这些其他列表是否只存储指向真实对象的指针引用,而不只是再次存储它们 只要项是类而不是结构:是。这取决于项

这是一个理论上的例子,但希望它能突出我的问题:

假设我有一个
Item
对象的主列表,
Item
有两个属性,比如
Weight
Value

该程序通常需要按
重量
排序,并获取最轻的
项目
,而在其他地方则需要按
排序,并获取最昂贵的
项目

主列表可能非常大,因此反复排序主列表将是大量不必要的工作。为了节省时间,是否可以将排序结果存储为自己的列表?这些其他列表是否只存储指向真实对象的指针,而不只是再次存储它们

这些其他列表是否只存储指向真实对象的指针引用,而不只是再次存储它们


只要
是类而不是结构:是。

这取决于
结构还是
。如果它是
(这是合理的默认值),则两个列表仅包含对对象的引用-不会重复所有的
权重
/
值。如果它是一个
结构
,那么所有的值都将被复制,因为每个值都有一个单独的支持向量,而实际的结构将在向量中。旁注:如果值是字符串,那么请注意字符串也是引用类型,因此字符串内容不会重复(除非它们是单独创建的,没有任何伪插入等)。

正如我们所看到的,类是引用类型,这意味着它们不会被复制到新列表中


确实可以保存两个列表,并通过代码< >价格> />代码进行排序,另一个按<代码>权重进行排序,从而使你的生活变得更容易

无关-但是你也可以考虑将数据保存在数据库中,并将聚集和非聚集索引的组合结合起来,然后查询它。数据库在这方面做得很好……如果你只想要最轻或最贵的商品,为什么需要对列表进行排序?@adrianm有什么替代方案?我只能考虑使用像LINQ这样的东西,但即使这样,与只在排序列表上使用0索引相比,在大型列表上的性能也很慢。由于列表基本上是不变的,但经常进行民意调查,我认为这样会更好?这是我希望听到的,是的,在实际代码中,我问的是关于
类的
es。