问题描述
我必须确定在排序的文本文件中是否存在给定的行(作为字符串)。该文件上的数据每天都会更改,平均有1.52亿条记录,文件重约5GB。该文件按字母顺序排列,并且记录用新行分隔。
示例:打招呼
文件:
苹果
香蕉
猫猫
狗
你好
我不需要搜索整个文件。找到确切的名称后,它可以返回字符串或整数。只是为了证明它的存在。
我尝试了以下操作:
using (var sr = new StreamReader(txtFile))
{
string line;
while ((line = sr.ReadLine()) != null)
{
if (line == searchedWord)
return true;
}
return false;
}
int result = File.ReadLines(txtFile).Count(line => line.Equals(searchedWord));
if (result > 0)
return true;
return false;
我的问题是:有找到更好的解决方案的线了吗?
解决方法
我已经测试了这段代码:
pip install pyqt5
它会在12秒内找到一个字符串,该字符串位于5 GB文件的末尾。如果您的程序需要一整天的时间来执行此操作,建议您不要从486上旋转的锈蚀磁盘上读取数据,而应该购买50美元的SSD和像样的CPU并在该硬件上处理文件。
您需要分析缓慢的来源,还需要显示一些实际数字。您是否正在从网络共享中读取内容,并且程序需要花费多长时间?
您可以执行一些技巧来读取适合您文件系统大小的文件块,并行处理这些文件块(并考虑其中一个文件块可能包含针的开始,而下一个文件块可能包含针的开始)等等,但请注意,要使框架的磁盘访问尽可能高效,需要进行大量工作。
不要比框架聪明,在合适的硬件上运行代码。