嗨。
我不确定是否可以减少程序的加载时间,或者我是否只需切换到 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 个文件。
最佳答案
您发布的代码直接相当于
FileList.AddRange(Directory.GetFiles(Folder).Take(100));
但是该代码段中唯一需要花费大量时间的是 GetFiles
调用。如果您正在处理数百万个项目,则在列表之间移动内容可能会出现问题,但在处理数百个项目时则不应该成为问题。但是您应该使用性能分析器来验证这个假设,也许有一些完全不同的东西需要时间。
您可以尝试将 .GetFiles
更改为 .EnumerateFiles
,因为后者返回可枚举而不是数组,因此如果您不需要完整的列表,可能会更快所有文件。
根据我的经验,使用 native API 而不是 GetFiles
列出文件时也可能获得性能加速。类似this answer的东西。但它确实需要相当多的有点复杂的代码。
关于c# - 减少从大量目录收集文件所需的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76737747/