【发布时间】:2015-12-16 14:16:40
【问题描述】:
StorageFolder.GetFilesAsync 非常慢:
- 约 7 秒的文件夹包含约 3500 个文件
回到 Windows Phone 8.0 Silverlight,我能够更快地获取 CameraRoll 的内容(通过MediaLibrary):
是否有可能加快GetFilesAsync 的速度,或者有没有其他方法可以获取文件夹的文件?
我需要照片文件来立即提取信息,例如 Geotag 或 DateTaken。您可以在我的应用程序GeoPhoto 中看到他们加载 Silverlight 的速度有多快 - 我现在正尝试将其移植到 UWP。我已经实现了缓存(使用图片路径映射地理标签和 DateTaken),所以我只需要图片路径来启动后续应用程序。尚未缓存的照片可以稍后显示(在长时间的GetFilesAsync-call 之后),但重要的是在用户启动应用后立即为他提供可以与之交互的内容。
【问题讨论】:
-
你试过
Windows.Storage.BulkAccess命名空间吗?FileInformationFactory.GetFilesAsync和FileInformationFactory.GetVirtualizedFilesVector可能更快。 -
@RaymondChen - 我刚刚尝试了
FileInformationFactory.GetFilesAsync方法,看看它是否更快,因为我以前从未使用过它......在一个蹩脚的例子中,我烘焙了 10500 个文件,它是 45- 60 秒返回,类似于StorageFolder.GetFilesAsync次。 -
您的文件夹是否在索引位置(如图书馆)?如果没有,那么别无选择,只能打磁盘。另外,你试过
GetVirtualizedFilesVector吗?我的猜测是,虚拟化向量的前期工作较少,因为它可以懒惰地生成内容。 -
@tipa 您能否为您的用例添加要求?您是否需要将目录中的所有文件显示在列表中?或者您是否需要它们在您的代码中并搜索文件。这些细节可能有助于找到解决方案。
-
@Herdo 我已经为我的用例添加了要求。希望它有助于找到解决方案。
标签: c# windows-runtime win-universal-app windows-10