将数据存储在内存中,这是一个好方法吗?

Mos*_*vah 4 .net c# memory

我有一个items.xml文件,一旦应用程序启动就会加载到内存中.items.xml中的每个元素都"转换"为类型Item(只有很少的int和字符串属性),然后添加到项列表中.项目列表应包含数千个实例Item.

在对象中存储数据(Item在我的示例中为类)是可以的吗?还有另一种方法将这些数据存储在内存中吗?

Car*_*ngo 7

首先担心正确的功能.其次,担心性能.分析应用程序并查看其在性能方面受到的影响.它可能永远不会在您的配置中.但是,如果您在此区域遇到性能问题,请尝试为项目的单个或子集创建密钥.这样,您可以使用键和项(或项列表)填充一个或多个词典,从而减少对相关项的访问时间.

请记住,这些查找字典"便宜",因为它们只存储对项目的引用而不是对象的副本.

  • 声誉毫无意义......很棒的答案卡罗!+1. (2认同)

Mar*_*ell 5

那很好,只要你确保你不吃所有的记忆应该没问题.我已经为具有更大数字的复杂系统做到了这一点.

如果您的数据通过列表中的索引以外的其他内容定期访问,则可能需要使用字典来索引项目,例如:

Dictionary<string, Item> lookup =
    list.ToDictionary(x => x.Code);
Run Code Online (Sandbox Code Playgroud)

然后您可以访问:

Item item = lookup["abc012"];
Run Code Online (Sandbox Code Playgroud)

也; 如果许多字符串值重复,你可以通过编写自己的interner来节省一些空间;

Dictionary<string,string> interner =
    new Dictionary<string,string>();
foreach(Item item in list) {
    string s, name = item.Name;
    if(interner.TryGetValue(name, out s))
        item.Name = s;
    else
        interner.Add(name, name);
}
Run Code Online (Sandbox Code Playgroud)

这将通过仅保留和重用唯一字符串来减少内存使用