【发布时间】:2016-10-10 18:46:38
【问题描述】:
所以我有这个类及其公共属性:
public static class DataStore
{
public static readonly List<Item> Items;
static DataStore
{
Items = new List<Item>
{
new Item {Name = "A"},
new Item {Name = "B"},
new Item {Name = "C"},
...//many more
};
}
}
为了节省内存,我将 List<Lazy<Item>> 添加到 DataStore:
List<Lazy<Item>> LazyItems = new List<Lazy<Item>>
{
new Lazy<Item>(() => new Item {Name="A"}),
new Lazy<Item>(() => new Item {Name="B"}),
};
但是,List<Item> 是公共财产,在很多地方都会被引用。如何保留现有的List<Item> 并使用新的属性?
【问题讨论】:
-
此更改是增加内存占用,而不是减少它。
-
您是否首先对此进行分析以实际确定原始示例中的内存消耗是否是瓶颈?
-
这里没有足够的上下文来帮助您。从字面上看,唯一有效的答案是“你不能那样做”。您的问题中也没有足够的信息来了解您尝试做的事情是否有用。但假设它是在您的实际场景中,您必须至少将
List<Item> Items更改为IList<Item> Items,以便您可以提供一个自定义IList<Item>实现,该实现了解LazyItems对象并可以检索那里的元素。也可以考虑使用IReadOnlyList<T>,因为修改任何一个列表都可能没有意义。 -
这是一个很好的例子,说明为什么
static/全局变量是不好的做法。