已关闭,该问题需要details or clarity,目前不接受回答。
**想要改进此问题?**通过editing this post添加详细信息并澄清问题。
3天前关闭。
Improve this question
为了澄清标题,每当使用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循环,但这是无用的,因为它已经执行了最长的操作。
为什么要这样做?:仅仅是因为我想向用户展示程序在一个大文件夹中加载文件的位置。
我试着寻找替代方法,但我没有找到任何。是的,它是我所尝试的方法的简称。
告诉我是否需要编辑任何东西,但最重要的是,问我具体我尝试了什么,因为我不记得我确切地尝试过的每件事。
1条答案
按热度按时间vd8tlhqk1#
你可以用
Directory.EnumerateFiles
代替GetFiles
,这样你就不会在开始处理它们之前把它们全部加载到内存中,而是一个接一个地加载。引用文档:
EnumerateFiles
和GetFiles
方法的区别如下:当使用EnumerateFiles
时,可以在返回整个集合之前开始枚举名称集合。当使用GetFiles
时,必须等待返回整个名称数组,然后才能访问数组。因此,当您处理许多文件和目录时,EnumerateFiles
可以更有效。但在我看来,你的进度条是无用的,无论如何,最长的动作是你处理文件的地方。所以这就是进度条有用的地方。