1

在(VB).NET(4.0 框架)中,我需要一个Dictionary<string, string>可以有效地存储其内容,或者更好地将其内部表示为文件并稍后加载的文件。

Ruby 在 PStore 中有这样的东西,请参阅ruby​​ 文档

目的是为例如从数据库中的文本翻译准备一个查找字典,并将其存储在一个磁盘文件中,该文件可以快速加载多次以生成输出。所以这不应该逐行读取文件并用键值对填充字典,而是直接将文件内容加载到其内部状态表示中。

我认为这应该是可能的,但如果您不这么认为,我也希望看到您的解释。

4

2 回答 2

2

正如我评论的那样,我仍然认为您获得的任何好处都会被实施的努力所抵消。我建议查看一些BerklyDBHamsterDB,我在几分钟内就搜索了这两者。

如果真的想手动实现某些东西,我想也许不是用Marshal类编写你自己的内存管理器来确保你的数据结构存储在一个可以快速编组到文件支持的连续块中,我会看看使用持久内存映射文件。然后你可以使用CreateViewAccessor来获取一个MemoryMappedViewAccessor可以用来读写原语和数据结构的实例。将其与任何大学文本或诸如B-Tree 之类的开源实现或类似的东西结合起来,您就可以得到一些工作。

于 2013-03-18T16:07:35.017 回答
1

如果您真的想为这个特定任务保持简单,我会这样:

class Pair {
    public string Key { get; set; }
    public string Value { get; set; }
}

var dict = new Dictionary<string, string>() {
    {"asd", "zxc"},
    {"111", "zzs"}
}; // Populate your dictionary somehow
var list = dict.ToList().Select( p => new Pair() { Key = p.Key, Value = p.Value} );
//Then XML-serialize this list

要阅读它:

//De-XML-serialize that list
dict = list.ToDictionary( p => p.Key, p => p.Value );

附带的好处是您可以仅使用文本编辑器修改存储的列表。

于 2013-03-14T10:04:25.513 回答