获取文件夹文件的速度比StorageFolder.GetFilesAsync()更快?

tip*_*ipa 7 c# windows-runtime win-universal-app windows-10

StorageFolder.GetFilesAsync非常慢:

  • ~~3500个文件夹的~7秒

回到Windows Phone 8.0 Silverlight,我能够更快地获取CameraRoll的内容(通过MediaLibrary):

  • 对于相同数量的文件,<1秒

有加速的可能性GetFilesAsync,还是有任何替代方法来获取文件夹的文件?

我需要照片文件立即提取地理标记DateTaken等信息.您可以在我的应用程序GeoPhoto中看到他们加载Silverlight的速度有多快- 我现在正试图移植到UWP.我已经实现了缓存(使用图片路径映射地理标记和DateTaken),所以我只需要后续应用程序启动的图片路径.然后可以在稍后(长GetFilesAsync调用之后)显示尚未缓存的照片,但是在他启动应用程序之后立即向用户提供他可以与之交互的内容是很重要的.

O.O*_*O.O 1

我想知道您是否读过此内容:https://www.suchan.cz/2014/07/file-io-best-practices-in-windows-and-phone-apps-part-1-available-apis-and -文件存在检查/

Windows 8.1 - 最后,在 Windows 8.1 上,最快的方法是新的 StorageFolder.TryGetItemAsync 方法,但与其他方法相比,差距很小。这里的主要好处肯定是所需的简单代码,如果文件不存在,则无需捕获任何异常。同步方法的结果与Windows 8平台类似,如果不需要原始同步上下文,则同步方法是更好的选择。

简而言之,要检查目标文件是否存在,在 WP8 和 WP8.1 Silverlight 上最快的方法是 File.Exists,在 Windows 8 和 WP8.1 XAML 上您应该使用 StorageFolder.GetFileAsync,在 Windows 8.1 上使用新方法 StorageFolder。尝试GetItemAsync。不要在任何平台上使用从 StorageFolder.GetFilesAsync 返回的 StorageFiles 迭代,它非常慢。此外,如果您不需要在原始线程上继续执行,则可以在 WP8.1 XAML、Windows 8 和 Windows 8.1 平台上使用同步替代方案。

或者类似的东西?

StorageFolder.GetItemsAsync(UInt32, UInt32) 
Run Code Online (Sandbox Code Playgroud)

获取前 X 个文件,以便为用户提供您想要的即时反馈。之后加载其余部分。

https://msdn.microsoft.com/en-us/library/windows/apps/br227287.aspx