为了澄清标题,每当使用DirectoryInfo.GetFiles()方法加载文件时。当我在谷歌上搜索时,我总是找到
var files = directory.GetFiles() //Loads all files in memory then they use it in a foreach loop, which is useless
foreach (var file in files)
{
progressBar1.Value += (int)Math.Floor(1 / files.Length);
}
但是你可以在我添加的注释中看到,该方法加载所有内存,然后使用for循环,但这是无用的,因为它已经做了最长的动作。
为什么我要这样做?:很简单,因为我想向用户显示程序在大文件夹中加载文件的位置。
我试着找到其他方法,但我没有找到。是的,它是what I tried的缩写。
如果我需要编辑什么,告诉我,但最重要的是,问我具体做了什么,因为我不记得我到底做了什么。
您可以使用Directory.EnumerateFiles
代替GetFiles
。这样,在开始处理它们之前,您就不会将它们全部加载到内存中,而是一个接一个地加载。
引用自docs:
EnumerateFiles
和GetFiles
方法的不同之处在于:当您使用EnumerateFiles
时,您可以在返回整个集合之前开始枚举名称集合。当您使用GetFiles
时,您必须等待整个名称数组返回,然后才能访问该数组。因此,当您处理许多文件和目录时,EnumerateFiles
可以更高效。
但在我看来,你的进度条是无用的,无论如何,最长的操作是你处理文件的地方。这就是进度条有用的地方了。