【发布时间】:2012-11-26 18:02:33
【问题描述】:
我有多个 150MB 大小的 .txt 文件。使用 C# 我需要从每个文件中检索包含字符串模式的所有行,然后将这些行写入新创建的文件。
我已经研究过类似的问题,但他们建议的答案都不能给我最快的获取结果的方法。我尝试了正则表达式、linq 查询、包含方法、使用字节数组搜索,但所有这些都需要 30 多分钟来读取和比较文件内容。
我的测试文件没有任何特定的格式,它就像我们不能基于分隔符拆分的原始数据和基于 DataViews 的过滤器。下面是该文件中每一行的示例格式。
Sample.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 异常
【问题讨论】:
-
使用数据库,大声呼喊。
-
没有分隔符?示例显示分隔符,这是否意味着您希望同时匹配:;123456789;和;abc1234567890abc;?
-
@Blah_Blah 确实如此!即使没有,读取所有文件内容以将数据拆分为字符串或字节数组然后进行比较是否需要大量时间,因为我认为读取所有文件内容需要更多时间?