需要建议来改进我正在使用 ASP.NET Core 编写的文件内容搜索程序
Need recommendation to improve the file content search program I am writing using ASP.NET Core
我正在编写一个带有以下参数的控制台程序-
- 目录路径
- 文件扩展名
- "yyyy-mm-dd" 格式的搜索日期
- 搜索文本
它搜索给定目录(参数 1)中具有特定扩展名(参数 2)的所有 xml 文件,修改日期(参数 3),包含文本(参数 4)。
目标目录目前有大约 55000 xml 个文件。
我怎样才能提高这个程序的性能?
对可能出错的地方有什么意见吗?
更新代码 以反映每个 Ashkan 响应的变化,而不是检查文件名上的日期我正在与实际文件写入日期进行比较。还添加了 try catch 块。
以下是我在ASP.NETCore 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.Instead 获取所有文件并过滤它们只获取具有给定扩展名的文件:
string[] filelist = Directory.GetFiles(fileExtension ,SearchOption.AllDirectories)
.Where(file => Path.GetFilenameWithoutExtension.Contains(searchDate).ToArray();
2.Although 文件是 XML,但您将它们视为字符串 (xdoc.Document.ToString().Contains(searchText)
),因此只需将它们作为字符串加载并节省 XML 的时间文档加载时间:
foreach(var file in files)
if(File.ReadAllText(file).Contains(searchText))
foundFilesCtr++;
我正在编写一个带有以下参数的控制台程序-
- 目录路径
- 文件扩展名
- "yyyy-mm-dd" 格式的搜索日期
- 搜索文本
它搜索给定目录(参数 1)中具有特定扩展名(参数 2)的所有 xml 文件,修改日期(参数 3),包含文本(参数 4)。
目标目录目前有大约 55000 xml 个文件。
我怎样才能提高这个程序的性能?
对可能出错的地方有什么意见吗?
更新代码 以反映每个 Ashkan 响应的变化,而不是检查文件名上的日期我正在与实际文件写入日期进行比较。还添加了 try catch 块。
以下是我在ASP.NETCore 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.Instead 获取所有文件并过滤它们只获取具有给定扩展名的文件:
string[] filelist = Directory.GetFiles(fileExtension ,SearchOption.AllDirectories)
.Where(file => Path.GetFilenameWithoutExtension.Contains(searchDate).ToArray();
2.Although 文件是 XML,但您将它们视为字符串 (xdoc.Document.ToString().Contains(searchText)
),因此只需将它们作为字符串加载并节省 XML 的时间文档加载时间:
foreach(var file in files)
if(File.ReadAllText(file).Contains(searchText))
foundFilesCtr++;