我正在编写一个采用以下参数的控制台程序-
- 目录路径
- 文件扩展名
- 搜索日期采用"年-月-日"格式
- 搜索文本
它搜索给定目录(参数 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++;