5

我有一个Person带有 4 个字符串和整数的简单类。

public class Person
{
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public int Age { get; set; }
        public string PostalCode { get; set; }
}

我们需要在内存中存储大量这些。该集合需要可通过任何字段进行搜索。项目将作为生命周期的一部分添加和删除。

Flyweight 模式似乎不起作用,因为对象中没有大量重复值,仅在字段级别。哪种模式或策略最适合限制内存开销并表现良好?

4

2 回答 2

2

我们需要在内存中存储大量这些。

那么数组 Person[]将是最精简的方式,但 aList<Person>会更接近并且更容易使用。只需确保使用容量参数最小化重新分配。

该集合需要可通过任何字段进行搜索

容易, .Where (p => p.FirstName == value)
用字典加速它会消耗内存。

于 2013-07-03T16:07:18.790 回答
-1

一些事情的组合可能在这里起作用......首先,最好将其保留为引用类型,这样您就不会在搜索时到处复制结构。用于string.Intern(string)减少重复的名字和姓氏以及邮政编码的内存使用量...最后用于Dictionary<TKey, TValue>按值索引这些条目...也许在TKeyFirstName 和TValue'的情况下是字符串,List<Person>以便您可以查找人员通过所述字符串...这称为倒排索引:http ://en.wikipedia.org/wiki/Inverted_index - 字典的替代方法是实现您自己的树或树结构,例如前缀树...您交易O(log n) 速度比 O(1) 字典少。

就将它们中的很多存储在内存中而言,这取决于很多是什么......但最终你希望有足够的内存来处理它们......或者开始扩展到分布式系统以共享对象,例如MapReduce 模式,或“分页”到磁盘上。

于 2013-07-03T16:03:33.937 回答