winforms 减少从大量目录中收集文件所需的时间

vsaztqbk  于 2023-08-07  发布在  其他
关注(0)|答案(1)|浏览(94)

你好
我不确定是否有可能减少我的程序的加载时间,或者我是否必须切换到SSD。也许有人有想法:)
我从大量的文件夹中获取第一个(最多)100个文件,并将其路径写入一个列表。问题是加载这个列表需要很长时间,因为我总是把文件夹的全部内容放到一个临时列表中,然后把这个临时列表的前100个条目写到我的最终列表中。如果我能跳过这个额外的步骤,也许会更快,但我不确定这是否可能,这是否会有任何不同。
我的代码看起来像这样:

foreach (string Folder in FolderList)
{
    List<string> FileListTMP = new List<string>();
    FileListTMP.AddRange(Directory.GetFiles(Folder));
    int i = 0;
    while (i < FileListTMP.Count && i < 100)
    {
        FileList.Add(FileListTMP[i]);
        i++;
    }
}

字符串
这将是伟大的,如果有一个解决我的问题,因为文件夹的数量总是在增长,加载时间已经在20秒左右长。:)

**更多信息:**目前大约有1500个文件夹。单个文件夹中的文件不超过1000个。平均每个文件夹大约有500个文件。

6l7fqoea

6l7fqoea1#

您发布的代码直接等效于

FileList.AddRange(Directory.GetFiles(Folder).Take(100));

字符串
但是在这段代码中唯一需要花费大量时间的是GetFiles-调用。如果要处理数百万个项,则在列表之间移动内容可能是一个问题,但如果要处理数百个项,则不应成为问题。但是您应该使用性能分析器来验证这个假设,也许有一些完全不同的东西需要时间。
您可以尝试将.GetFiles更改为.EnumerateFiles,因为后者返回可枚举对象而不是数组,因此如果您不需要所有文件的完整列表,可能会更快。
根据我的经验,在使用本机API而不是GetFiles列出文件时,也可能获得性能加速。类似于this answer。但它确实需要相当多的复杂代码。

相关问题