优化内存使用率和存储和检索数百万对象的最快方式
本文关键字:方式 对象 检索 内存 使用率 存储 优化 数百万 | 更新日期: 2023-09-27 18:27:11
在WPF中,我希望以低内存使用率有效地存储数百万个对象,并快速检索。下面是我的示例课。
public class CellInfo
{
public int A { get; set; }
public int B { get; set; }
public string C { get; set; }
public object D { get; set; }
public bool E { get; set; }
public double F { get; set; }
public ClassA G { get; set; }
}
我想存储数百万个CellInfo
对象,每个对象都有自己的标识。我想用那个身份找回它。如果没有定义CellInfo实例的属性,则需要返回默认值,该值将存储在静态字段中。
所以我只想将定义的CellInfo对象的属性和其他我不想保存在内存中的属性存储起来,并且可以从静态变量中检索这些属性
那么,有人能给我推荐一种在低内存使用率下存储和检索数百万对象的最快方法吗?
注意:我不想要任何额外的软件安装和数据库或任何外部文件来存储这个。
您还没有指出哪个字段是"自己的身份",所以我假设了一个Guid Identity
。键入此标识的Dictionary
应该提供最快的检索。
Dictionary<Guid, CellInfo> cells = new Dictionary<Guid, CellInfo>();
如果您已经有了数据,可以使用.ToDictionary()
从枚举表中投影键/值映射。
如果您需要同时变异并从多个线程访问集合(或者如果您打算使集合静态),则可以使用ConcurrentDictionary
进行交换以解决线程安全问题:
在访问元素之前,您需要通过ContainsKey
(或Amleth的TryGet
)来确定该项是否存在于Dictionary中。如果没有,请使用默认元素。因此,建议您隐藏底层的字典实现,并通过封装助手强制消费者为您进行此检查。