获取文件夹文件的速度比StorageFolder.GetFilesAsync()更快
本文关键字:GetFilesAsync 更快 StorageFolder 文件夹 文件 速度 获取 | 更新日期: 2023-09-27 18:13:23
StorageFolder.GetFilesAsync速度慢得令人难以置信:
- 对于包含约3500个文件的文件夹,约7秒
回到WindowsPhone8.0Silverlight,我能够更快地获得CameraRoll的内容(通过MediaLibrary(:
- <对于相同数量的文件,1秒
有没有可能加快GetFilesAsync
的速度,或者有没有其他方法可以获取文件夹中的文件?
我需要照片文件来立即提取信息,如地理标签或日期拍摄。你可以在我的应用程序GeoPhoto中看到他们加载Silverlight的速度有多快——我现在正试图将其移植到UWP。我已经实现了缓存(用图片路径映射地理标记和DateTake(,所以我只需要图片路径来启动后续的应用程序。还没有缓存的照片可以稍后显示(在长时间的GetFilesAsync
-调用之后(,但重要的是,在用户启动应用程序后,立即为他提供一些可以交互的东西。
我想知道你是否读过这篇文章:https://www.suchan.cz/2014/07/file-io-best-practices-in-windows-and-phone-apps-part-1-available-apis-and-file-exists-checking/
Windows 8.1-最后,在Windows 8.1上,最快的方法是新的StorageFolder.TryGetItemAsync方法,但在与其他方法相比。这里的主要好处肯定是需要简单的代码,如果文件不存在。同步方法的结果与Windows 8类似平台,如果不需要原始同步上下文,则同步方法是一个更好的选择。
简而言之,为了检查目标文件是否存在,在WP8和WP8.1 Silverlight上,最快的方法是file.exists,在Windows 8和WP8.1XAML应该使用StorageFolder.GetFileAsync,在Windows 8.1上使用新方法StorageFolder.TryGetItemAsync.不要使用迭代从任意平台,速度非常慢如果您不需要继续对于原始线程,您可以在WP8.1上使用同步替代方案XAML、Windows 8和Windows 8.1平台。
或者类似的东西?
StorageFolder.GetItemsAsync(UInt32, UInt32)
获取第一个X数量的文件,以便立即向用户提供您想要的反馈。之后加载其余部分。
https://msdn.microsoft.com/en-us/library/windows/apps/br227287.aspx
编辑:由于我最初的答案似乎没有帮助,我希望这个答案能与您的问题相匹配。
我创建了一个文件夹,里面有大约4000个文件,只是为了测试,并使用了秒表来打发时间
仅阅读文件夹中的每一项就花费了:
System.IO.Directory.GetFiles()
:0.2秒
Windows.Storage.StorageFolder.GetFilesAsync
~5.5秒
多次执行并按不同顺序执行
我知道这只是将文件名作为字符串提供给你,但根据你用来阅读图片的库,这可能仍然会对你有所帮助。
原始答案:
当您将路径作为字符串(例如来自ApplicationData.Current.LocalFolder.Path
(时,可以使用System.IO.Directory.GetFiles(string path)
。它不返回特定的对象,而是以字符串形式返回路径。您可以将它们与静态类System.IO.File
一起使用。
它还允许您传递searchPattern,它允许您使用占位符,如*和并且它是同步工作的,但是通过这种方法检索文件的速度非常快。