需要建议来改进我正在使用 ASP.NET Core编写的文件内容搜索程序



我正在编写一个采用以下参数的控制台程序-

  1. 目录路径
  2. 文件扩展名
  3. 搜索日期采用"年-月-日"格式
  4. 搜索文本

它搜索给定目录(参数 1(中具有特定扩展名(参数 2(的所有 xml 文件,修改日期(参数 3(,包含文本(参数 4(。

目标目录现在有大约 55000 个 xml 文件。

如何提高此程序的性能?

对可能出现的问题有何评论?

更新了代码以反映每个 Ashkan 响应的更改,而不是检查我正在比较的文件名上的日期与实际文件写入日期。还添加了尝试捕获块。

以下是我在 ASP.NET Core 2.2中编写的程序

try
{
var dirPath = args[0];
var fileExtension = args[1];
var searchDate = args[2];
var searchText = args[3];
DirectoryInfo dir = new DirectoryInfo(dirPath);
IEnumerable<FileInfo> filelist = dir.GetFiles(fileExtension, SearchOption.AllDirectories)
.Where(file => file.LastWriteTime.ToString("yyyy-MM-dd") == searchDate);
var foundFilesCtr = 0;
Console.WriteLine($"Searching for {searchText} in {dir}");
Console.WriteLine("------------------------------------");
Console.WriteLine("Search results...");
Console.WriteLine($"Found {filelist.Count()} files with extenstion {fileExtension} and dated {searchDate}");
foreach (var item in filelist)
if (File.ReadAllLines(item.FullName).Contains(searchText))
{
Console.WriteLine($"File with selected content: {item.FullName}");
foundFilesCtr++;
}
Console.WriteLine($"Found {foundFilesCtr} files with text {searchText}");
Console.WriteLine("------------------------------------");
}
catch(Exception ex)
{
Console.WriteLine(ex.InnerException);
}

1.不是获取所有文件并过滤它们,而是仅获取具有给定扩展名的文件:

string[] filelist = Directory.GetFiles(fileExtension ,SearchOption.AllDirectories)
.Where(file => Path.GetFilenameWithoutExtension.Contains(searchDate).ToArray();

2.虽然文件是XML,但您将它们视为字符串(xdoc.Document.ToString().Contains(searchText)(,因此只需将它们加载为字符串即可节省XML文档加载时间:

foreach(var file in files)
if(File.ReadAllText(file).Contains(searchText))
foundFilesCtr++;

最新更新