优化内存使用和最快的方式来存储和检索数百万个对象

时间:2014-10-21 05:02:55

标签: c# wpf performance memory data-structures

在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对象的属性以及其他我不想保留在内存中的属性,并且可以从静态变量中检索它们。

那么有人可以建议我以最快的方式存储和检索内存使用率低的数百万个对象吗?

注意:我不希望任何其他软件安装和数据库或任何外部文件来存储它。

1 个答案:

答案 0 :(得分:1)

您还没有表明哪个字段是自己的身份,因此我假设了一个Guid Identity。键入此标识的Dictionary应提供最快的检索。

Dictionary<Guid, CellInfo> cells = new Dictionary<Guid, CellInfo>();

如果您已有数据,则可以使用.ToDictionary()来设置可枚举的键/值映射。

如果您需要同时变异并从多个线程访问集合(或者如果您打算将集合设置为静态),则可以使用ConcurrentDictionary替换以解决线程安全问题:

在访问元素之前,您需要通过ContainsKey(或根据Amleth TryGet确定该字词是否存在于字典中。如果没有,请使用您的默认元素。因此,建议您隐藏基础字典实现并强制消费者通过封装帮助程序来执行此检查。