C#搜索大单词列表

时间:2011-04-02 15:57:59

标签: c# .net memory

我有一个包含约170,000字左右的文件。在.NET中处理这个问题的最佳方法是什么?

将它加载到List keep in memory并搜索列表是否有意义。这个大小的列表是否会成为记忆中的问题?任何有关加载和搜索此类列表的建议都将受到赞赏。

谢谢,

4 个答案:

答案 0 :(得分:2)

  

将它加载到List keep in memory并搜索列表是否有意义。这个大小的列表是否会成为记忆中的问题?

除非你的话很长,否则记忆不会成为问题。

如果您说的是标准拉丁字母表中的英语,那么记忆不会成为问题。

但你必须具体说明你的单词长度。如果你正在处理{A, C, G, T}上的文字而这些文字恰好是DNA那么,是的,记忆将是一个问题。

  

有关加载和搜索此类列表的任何建议都将不胜感激。

你在做什么类型的搜索?您是在寻找存在还是在寻找最近的匹配(比方说,最接近的字母匹配)?如果存在,请使用HashSet<string>。如果最接近字母匹配,我将从排序的List<string>开始并进行二分搜索。但如果你的话很长,我可能会考虑像前缀树一样。

这最后一个问题的答案在很大程度上取决于你究竟在做什么。

答案 1 :(得分:1)

将它们加载到List<string>,排序并使用BinarySearch

http://msdn.microsoft.com/en-us/library/w4e7fxsh.aspx

答案 2 :(得分:0)

将整个列表加载到内存中将是内存最密集的选项,但也是最快的选项。

如果您使用文件流,则由于连续IO而导致访问速度缓慢,因此您的固定内存开销很低。

这是您必须为您的应用程序做出的选择。

答案 3 :(得分:0)

杰森建议的