Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#目录扫描性能_C#_Io - Fatal编程技术网

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()是否可以