gpt4 book ai didi

c# - 使用并行在 C# 中进行文件搜索优化

转载 作者:行者123 更新时间:2023-11-30 23:05:52 24 4
gpt4 key购买 nike

我有一个包含许多 CSV 文件的文件夹,每个文件的大小约为 3MB。

一个 CSV 的内容示例:

afkla890sdfa9f8sadfkljsdfjas98sdf098,-1dskjdl4kjff;
afkla890sdfa9f8sadfkljsdfjas98sdf099,-1kskjd11kjsj;
afkla890sdfa9f8sadfkljsdfjas98sdf100,-1asfjdl1kjgf;
etc...

现在我有一个用 C# 编写的控制台应用程序,它在每个 CSV 文件中搜索特定字符串。那些要搜索的字符串在一个 txt 文件中。

搜索txt文件的例子:

-1gnmjdl5dghs
-17kn3mskjfj4
-1plo3nds3ddd

然后我调用方法在给定文件夹中的所有文件中搜索每个搜索字符串:

private static object _lockObject = new object();
public static IEnumerable<string> SearchContentListInFiles(string searchFolder, List<string> searchList)
{
var result = new List<string>();

var files = Directory.EnumerateFiles(searchFolder);
Parallel.ForEach(files, (file) =>
{
var fileContent = File.ReadLines(file);

if (fileContent.Any(x => searchList.Any(y => x.ToLower().Contains(y))))
{
lock (_lockObject)
{
foreach (string searchFound in fileContent.Where(x => searchList.Any(y => x.ToLower().Contains(y))))
{
result.Add(searchFound);
}
}
}
});

return result;
}

现在的问题是,我能否以任何方式提高此操作的性能?我有大约 100GB 的文件要搜索。在 SSD 磁盘和良好的 i7 CPU 上,使用大约 25 个搜索字符串搜索所有 ~30.000 个文件大约需要 1 小时。

拥有较大的 CSV 文件或较小的 CSV 文件会有不同吗?我只希望搜索尽可能快。

更新

我已经尝试了你写的每一个建议,现在这对我来说是最好的(从 LINQ 中删除 ToLower 产生了最好的性能提升。从 1 小时开始的搜索时间现在是 16 分钟!):

public static IEnumerable<string> SearchContentListInFiles(string searchFolder, HashSet<string> searchList)
{
var result = new BlockingCollection<string>();

var files = Directory.EnumerateFiles(searchFolder);
Parallel.ForEach(files, (file) =>
{
var fileContent = File.ReadLines(file); //.Select(x => x.ToLower());

if (fileContent.Any(x => searchList.Any(y => x.Contains(y))))
{
foreach (string searchFound in fileContent.Where(x => searchList.Any(y => x.Contains(y))))
{
result.Add(searchFound);
}
}
});

return result;
}

最佳答案

Lucene 之类的东西可能会提高性能:为什么不为数据编制索引以便轻松搜索?

看看Lucene .NET

您将避免按顺序搜索数据。此外,您可以基于相同的数据对多个指标进行建模,以便能够以光速获得特定的结果。

关于c# - 使用并行在 C# 中进行文件搜索优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48543469/

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