在创建子文件夹时,UWP列举了带有10,000个文件的文件夹



我是一个经验丰富的开发人员,但这让我在UWP中陷入困境 - 我会保持简单。

假设我想浏览图片文件夹中的所有照片,将它们水印,然后将水印版本保存在图片的子文件夹中(例如,图片 watermarked)

听起来很容易?

尝试1:使用getFileSASync(含量getItemSasync,getFolderSasync) - 此方法遍历每个文件,从而为我提供了所需的存储文件。

这种方法有2个问题:

  1. 我在扫描每个文件之前无法显示进度栏,这就是UWP痛苦慢。

  2. 如果我保留任何参考,运行时经纪人将消耗所有内存到存储文件对象(因此枚举并再次枚举以获取一个进度非常慢,认为比Win32慢1000倍)

尝试2:使用查询 - 此方法涉及使用Windows.System.Search&查询将指针(ISH)列表返回到所有文件中。然后,我可以使用Storage -FolderQueryResult将每个存储文件飞行并立即发布,以使运行时经纪人行为。这非常快,因为它使用Windows索引系统,真的非常快。

问题在于,查询系统很愚蠢,一旦我创建了子文件夹"水印照片",查询文件就会由查询返回的存储文件(在查询时不存在)就开始包含来自水印文件夹的文件。看来查询实际上只是许多文件,而不是实际文件的静态列表,因此根据在其范围内调用查询后添加/删除的任何文件,结果是任意的。

任何有想法的人?

解决 - 使用索引系统不可能。我创建了自己的查询类。它使用getItemSasync的文件夹方法,这里的对象数不会杀死RuntimeBroker,我将路径存储在字符串列表中。包含所有文件和子文件夹的路径。然后,我可以使用getFileFrompathAsync根据需要实例化和破坏存储网络。Runtime Broker可以接受,尽管它并不是它的最佳性能,它确实可以为我提供自定义的文件/文件夹过滤。如果有人需要更多信息,请详细说明

最新更新