首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >UWP在创建子文件夹时枚举包含10,000个文件的文件夹

UWP在创建子文件夹时枚举包含10,000个文件的文件夹
EN

Stack Overflow用户
提问于 2017-10-02 09:40:01
回答 1查看 359关注 0票数 1

我是一个相当有经验的开发人员,但这让我陷入了UWP的困境--我会保持简单。

假设我想查看图片文件夹中的所有照片,给它们加水印,并将水印版本保存在图片的子文件夹中(例如。图片\水印)

听起来容易吗?

Try 1:使用GetFilesAsync (包括。GetItemsAsync,GetFoldersAsync) --这个方法贯穿每个文件,给出了我需要的StorageFile对象。

这种方法有两个问题:

  1. 我不能显示一个进度条,直到我扫描了每一个文件,这是痛苦的缓慢在UWP。
  2. 如果我保持对StorageFile对象的任何引用,运行时代理将消耗所有内存(因此枚举并再次枚举以获得进度非常慢,请考虑比Win32慢1,000倍)

Try 2:使用查询的-这个方法涉及使用Windows.System.Search &查询来返回指向所有文件的指针列表(ish)。然后,我可以使用StorageFolderQueryResult动态获取每个StorageFile并立即发布,这样运行时代理就可以运行。这是非常快,因为它使用Windows索引系统,真的,非常快。

问题是查询系统相当愚蠢,当我创建子文件夹“带水印的照片”时,查询返回的存储文件(在查询时不存在)开始包含来自水印文件夹的文件。看起来,该查询实际上只是一些文件,而不是实际文件的静态列表,因此,根据在其范围内调用查询后添加/删除的任何文件,结果是任意的。

有人想过该怎么做吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-26 09:21:39

解决了-不可能使用索引系统。我创建了自己的查询类。它使用文件夹的GetItemsAsync方法,这里的对象数量不会杀死RuntimeBroker,我将路径存储在字符串列表中。包含所有文件和子文件夹的路径。然后,我可以根据需要使用GetFileFromPathAsync实例化和销毁StorageItems。RuntimeBroker对此没有意见,尽管它并不是最好的性能,但它确实为我提供了自定义文件/文件夹筛选。如果有人需要更多的信息,我很乐意详细说明。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46523087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档