gpt4 book ai didi

c# - 逐行读取一个大文本文件并搜索一个字符串

转载 作者:太空宇宙 更新时间:2023-11-03 19:16:38 24 4
gpt4 key购买 nike

我目前正在开发一个读取大约 50000 行文本文件的应用程序。对于每一行,我需要检查它是否包含特定的字符串。

目前,我使用传统的 System.IO.StreamReader 逐行读取我的文件。

问题是文本文件的大小每次都会改变。我做了几个测试性能,我注意到当文件大小增加时,读取一行将花费更多时间。

例如:

读取包含 5000 行的 txt 文件:0:40
读取包含 10000 行的 txt 文件:2:54

读取 2 倍大的文件需要 4 倍的时间。我无法想象阅读一个 100000 行的文件需要多少时间。

这是我的代码:

using (StreamReader streamReader = new StreamReader(this.MyPath))
{
while (streamReader.Peek() > 0)
{
string line = streamReader.ReadLine();

if (line.Contains(Resources.Constants.SpecificString)
{
// Do some action with the string.
}
}
}

有没有办法避免这种情况:更大的文件 = 更多的时间来阅读一行?

最佳答案

试试这个:

var toSearch = Resources.Constants.SpecificString;
foreach (var str in File.ReadLines(MyPath).Where(s => s.Contains(toSearch))) {
// Do some action with the string
}

这避免了通过在循环之前缓存值来在每次迭代中访问资源。如果这没有帮助,请尝试根据高级字符串搜索算法编写您自己的 Contains,例如 KMP .


注意:一定要使用File.ReadLines它懒惰地读取行(不像看起来相似的 File.ReadAllLines 一次读取所有行)。

关于c# - 逐行读取一个大文本文件并搜索一个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16105856/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com