winforms 每次在DirectoryInfo.getFiles()中加载新文件时,如何执行操作[已关闭]

vu8f3i0k  于 2023-04-12  发布在  其他
关注(0)|答案(1)|浏览(108)

已关闭,该问题需要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循环,但这是无用的,因为它已经执行了最长的操作。

为什么要这样做?:仅仅是因为我想向用户展示程序在一个大文件夹中加载文件的位置。

我试着寻找替代方法,但我没有找到任何。是的,它是我所尝试的方法的简称。
告诉我是否需要编辑任何东西,但最重要的是,问我具体我尝试了什么,因为我不记得我确切地尝试过的每件事。

vd8tlhqk

vd8tlhqk1#

你可以用Directory.EnumerateFiles代替GetFiles,这样你就不会在开始处理它们之前把它们全部加载到内存中,而是一个接一个地加载。
引用文档:
EnumerateFilesGetFiles方法的区别如下:当使用EnumerateFiles时,可以在返回整个集合之前开始枚举名称集合。当使用GetFiles时,必须等待返回整个名称数组,然后才能访问数组。因此,当您处理许多文件和目录时,EnumerateFiles可以更有效。
但在我看来,你的进度条是无用的,无论如何,最长的动作是你处理文件的地方。所以这就是进度条有用的地方。

相关问题