我有多个 .txt 文件,每个文件大小为150MB。使用 C# 我需要从每个文件中检索包含字符串模式的所有行,然后将这些行写入新创建的文件。
我已经研究过类似的问题,但他们建议的答案都不能给我最快的获取结果的方法。我尝试了正则表达式、linq 查询、包含方法、使用字节数组搜索,但所有这些都需要 30 多分钟来读取和比较文件内容。
我的测试文件没有任何特定的格式,它就像我们无法基于分号拆分和基于 DataViews 过滤的原始数据。以下是该文件中每一行的示例格式。
样本.txt
LTYY;;0,0,;123456789;;;;;;;20121002 02:00;;
ptgh;;0,0,;123456789;;;;;;;20121002 02:00;;
HYTF;;0,0,;846234863;;;;;;;20121002 02:00;;
Multiple records......
我的代码
using (StreamWriter SW = new StreamWriter(newFile))
{
using(StreamReader sr = new StreamReader(sourceFilePath))
{
while (sr.Peek() >= 0)
{
if (sr.ReadLine().Contains(stringToSearch))
SW.WriteLine(sr.ReadLine().ToString());
}
}
}
我想要一个示例代码,它可以在不到一分钟的时间内从 Sample.txt中搜索123456789 。如果我的要求不清楚,请告诉我。提前致谢!
编辑
我找到了根本原因,因为文件驻留在远程服务器中会花费更多时间来读取它们,因为当我将文件复制到本地机器时,所有比较方法都很快完成,所以这不是我们阅读方式的问题或比较内容,他们或多或少花费了相同的时间。
但是现在我该如何解决这个问题,我无法将所有这些文件复制到我的机器上进行比较并获得 OutOfMemory 异常