匹配大文本文件中的字符串?

我有一个字符串列表,其中包含大小为152MB的文本文件中的大约700万个项目。 我想知道什么是实现一个带有单个字符串的函数的最佳方法,并返回它是否在该字符串列表中。

您是否需要多次匹配此文本文件? 如果是这样,我将创建一个HashSet 。 否则,只是逐行读取它(我假设每行有一个字符串)并查看它是否匹配。

在内存中,152MB的ASCII最终将超过300MB的Unicode数据 – 但在现代机器中有足够的内存,因此将所有内容保存在HashSet中将使得重复查找确实非常快。

绝对最简单的方法是使用File.ReadAllLines ,虽然这将创建一个数组,然后将被丢弃 – 不是很好的内存使用,但可能不是太糟糕:

 HashSet strings = new HashSet(File.ReadAllLines("data.txt")); ... if (strings.Contains(stringToCheck)) { ... } 

取决于你想做什么。 当你想一次又一次地重复搜索匹配时,我会将整个文件加载到内存中(进入HashSet )。 在那里搜索匹配非常容易。