C#目录扫描性能
我在网络驱动器上有一个文件夹结构 预订中心->设施->文件 乙二醇C#目录扫描性能,c#,io,C#,Io,我在网络驱动器上有一个文件夹结构 预订中心->设施->文件 乙二醇 EUR/12345678/File_archive1.txt EUR/12345678/File_archive2.txt EUR/12345678/File_latest.txt EUR/5555/File_archive1.txt EUR/5555/File_archive2.txt EUR/5555/File_latest.txt 当用户从下拉列表中选择预订中心时,我希望代码在上面的网络路径中查找该预订中心,查看所有子
- EUR/12345678/File_archive1.txt
- EUR/12345678/File_archive2.txt
- EUR/12345678/File_latest.txt
- EUR/5555/File_archive1.txt
- EUR/5555/File_archive2.txt
- EUR/5555/File_latest.txt
public IDictionary<string, Portfolio> ReadPortfolios()
{
var portfolios = new Dictionary<string, Portfolio>();
var di = new DirectoryInfo(PortfolioPath);
var possibleFacilities = di.GetDirectories();
foreach (var possibleFacility in possibleFacilities)
{
try
{
if (possibleFacility.GetFiles().Any())
{
var mostRecentFile = possibleFacility.GetFiles().OrderBy(file => file.LastWriteTimeUtc).Last();
var portfolio = UnzipAndReadPortfolio(mostRecentFile);
if (portfolio == null) continue;
portfolios.Add(possibleFacility.Name, portfolio);
}
}
catch (Exception ex)
{
Console.WriteLine(@"Failed to read portfolio: " + ex.Message);
}
}
return portfolios;
}
公共IDictionary ReadPortfolions()
{
var公文包=新字典();
var di=新目录信息(PortfolioPath);
var possibleFacilities=di.GetDirectories();
foreach(可能发生率中的可能发生率变量)
{
尝试
{
if(possibleFacility.GetFiles().Any())
{
var mostRecentFile=possibleFacility.GetFiles().OrderBy(file=>file.LastWriteTimeUtc.Last();
var portfolio=UnzipAndReadPortfolio(mostRecentFile);
如果(投资组合==null)继续;
公文包.Add(possibleFacility.Name,公文包);
}
}
捕获(例外情况除外)
{
Console.WriteLine(@“无法读取公文包:“+ex.Message”);
}
}
收益组合;
}
如果您对“PortFolioPath”的所有子目录感兴趣,请尝试使用GetDirectory和/或GetFiles的重载,这允许您传递SearchOption.AllDirectory参数:它将避免对网络的多次访问
循环中还有两个GetFiles()调用,您应该将第一个调用的结果存储在局部变量中
您没有提供UnzipAndReadPortfolio的代码,这可能是最慢的部分(…是否?)
请记住:在您的代码中,经常可以认为“一个方法调用=一个网络访问”。因此,尝试扁平化您的循环,减少FSO访问,等等。如果您对“PortFolioPath”的所有子目录感兴趣,请尝试使用GetDirectory和/或GetFiles的重载,它允许您传递SearchOption。AllDirectories参数:它将避免对网络的多次访问 循环中还有两个GetFiles()调用,您应该将第一个调用的结果存储在局部变量中 您没有提供UnzipAndReadPortfolio的代码,这可能是最慢的部分(…是否?)
请记住:在您的代码中,经常可以认为“一个方法调用=一个网络访问”。因此,尝试扁平化您的循环,减少FSO访问,等等。如果您对“PortFolioPath”的所有子目录感兴趣,请尝试使用GetDirectory和/或GetFiles的重载,它允许您传递SearchOption。AllDirectories参数:它将避免对网络的多次访问 循环中还有两个GetFiles()调用,您应该将第一个调用的结果存储在局部变量中 您没有提供UnzipAndReadPortfolio的代码,这可能是最慢的部分(…是否?)
请记住:在您的代码中,经常可以认为“一个方法调用=一个网络访问”。因此,尝试扁平化您的循环,减少FSO访问,等等。如果您对“PortFolioPath”的所有子目录感兴趣,请尝试使用GetDirectory和/或GetFiles的重载,它允许您传递SearchOption。AllDirectories参数:它将避免对网络的多次访问 循环中还有两个GetFiles()调用,您应该将第一个调用的结果存储在局部变量中 您没有提供UnzipAndReadPortfolio的代码,这可能是最慢的部分(…是否?)
请记住:在您的代码中,经常可以认为“一个方法调用=一个网络访问”。因此,尝试扁平化您的循环,减少FSO访问,等等。这可能是一个真正的性能提升
var mostRecentFile = possibleFacility.GetFiles()
.OrderBy(file => file.LastWriteTimeUtc)
.LastOrDefault();
if(mostRecentFile != null)
....
并注释掉第一条
// if(possibleFacility.GetFiles().Any())
一个可能真正的小性能增益
var mostRecentFile = possibleFacility.GetFiles()
.OrderBy(file => file.LastWriteTimeUtc)
.LastOrDefault();
if(mostRecentFile != null)
....
并注释掉第一条
// if(possibleFacility.GetFiles().Any())
一个可能真正的小性能增益
var mostRecentFile = possibleFacility.GetFiles()
.OrderBy(file => file.LastWriteTimeUtc)
.LastOrDefault();
if(mostRecentFile != null)
....
并注释掉第一条
// if(possibleFacility.GetFiles().Any())
一个可能真正的小性能增益
var mostRecentFile = possibleFacility.GetFiles()
.OrderBy(file => file.LastWriteTimeUtc)
.LastOrDefault();
if(mostRecentFile != null)
....
并注释掉第一条
// if(possibleFacility.GetFiles().Any())
最明显的是:
每次调用possibleFacility.GetFiles()时,都会得到文件夹中的所有文件。
您必须调用它并将其保存在变量中,然后使用此变量。最明显的是:
每次调用possibleFacility.GetFiles()时,都会得到文件夹中的所有文件。
您必须调用它并将其保存在变量中,然后使用此变量。最明显的是:
每次调用possibleFacility.GetFiles()时,都会得到文件夹中的所有文件。
您必须调用它并将其保存在变量中,然后使用此变量。最明显的是:
每次调用possibleFacility.GetFiles()时,都会得到文件夹中的所有文件。
您必须调用它并将其保存在变量中,然后使用此变量。也许您可以在Visual Studio中进行“性能分析”,以检查哪种方法比较慢?如果您对“UnzipAndReadPortfolio”进行注释,过程是否更快?您枚举了两倍的可能性。GetFiles()您是否可以预先计算并缓存结果字典,而不是每次选择下拉菜单时都重新计算它?也许您可以在Visual Studio中进行“性能分析”,以检查哪种方法速度较慢?如果您对“UnzipAndReadPortfolio”进行注释,过程是否更快?您枚举了两倍的可能性。GetFiles()您是否可以预先计算并缓存结果字典,而不是每次选择下拉菜单时都重新计算它?也许您可以在Visual Studio中进行“性能分析”,以检查哪种方法速度较慢?如果您注释“UnzipAndReadPortfolio”,则过程是否更快?您可以枚举两倍的可能性Facility.GetFiles()是否可以