我在我的UWP应用程序中创建了一个图像选择器,其中我想显示一个文件夹(图片库)中的所有图像。它类似于Windows平台中的默认照片应用程序。
到目前为止做了什么?
我使用过一个网格视图&将它与代码隐藏文件中的列表绑定。我已经查询了图片文件夹,并将图像作为流读取,并逐一添加到列表中。最后将列表设置为网格视图的源。
参考:Link
问题是什么?
当我逐个阅读图像时,我认为当该文件夹中的图像增加到10k时,它会很慢。
查询
我们可以在网格视图中执行类似分页的操作吗?由于窗口大小可在UWP中调整大小,一次最多可显示30-40张图像,我们只能加载30&当用户向下滚动然后再加载40张图片时?
其次,我们可以知道默认照片应用程序如何做这件事吗?
P.S我已经搜索了很多,但我没有任何方法可以更好地优化它。 Google,SO等,但收效甚微。任何帮助将不胜感激。
答案 0 :(得分:1)
默认情况下,如果您没有设置任何可以阻止UI虚拟化的任务,那么我认为当该文件夹中的图像增加到10k时会很慢。
ListView
和GridView
会默认为您执行UI虚拟化。详情请参阅ListView and GridView UI optimization的“UI虚拟化”部分。因此,您可能不需要过多关注GridView
性能。
我们只能加载30&当用户向下滚动然后再加载40张图片时?
为了满足这一要求,似乎所需的数据虚拟化需要参考this document:
数据集需要一种数据虚拟化的方法,该数据集非常大,以至于不能或不应该一次全部存储在内存中。您将初始部分加载到内存(从本地磁盘,网络或云),并将UI虚拟化应用于此部分数据集。您可以根据需要以递增方式或从主数据集(随机访问)中的任意点加载数据。
您可以根据需要通过数据虚拟化逐步加载数据。有关如何操作的详细信息,请参阅Data virtualization official sample。此示例使用自定义数据源在默认图片文件夹的内容上演示数据虚拟化。