2017-07-16 35 views
1

我在UWP应用程序中创建一个图像选择器,其中我想显示来自一个文件夹(图片库)的所有图像。它类似于Windows平台中的默认照片应用程序。在网格视图中使用分页在UWP中加载图像

到目前为止做了什么?

我已经使用了一个Grid view &将它与代码隐藏文件中的列表绑定。我查询了图片文件夹并将图片作为流读取并逐个添加到列表中&最后将列表设置为网格视图的源代码。

参考:Link

什么问题?

由于我一个接一个的阅读图像,我认为当文件夹中的图像增加到10k时会很慢。

查询

我们可以这样做分页以网格视图?由于窗口大小在UWP中可调整大小,一次最多显示30-40张图像,当用户向下滚动然后再加载40张图像时,我们是否只能加载30个&?其次,我们可以不知何故知道默认的照片应用程序如何做这件事情?

P.S我搜索了很多,但我没有得到任何方式可以更好地优化它。谷歌,SO等,但没有太多。

任何帮助将不胜感激。

+0

尝试扩展您的搜索,以包括wpf而不是uwp。这里有相当多的讨论可以进行调整。 https://stackoverflow.com/questions/1603605/wpf-paged-collectionviewsource和https://stackoverflow.com/questions/784726/how-can-i-paginate-a-wpf-datagrid – dkackman

+0

请参阅[ListView和GridView UI优化](https://docs.microsoft.com/en-us/windows/uwp/debug-test-perf/optimize-gridview-and-listview)。对于分页请参考[ListView(UWP)中的分页]](https://stackoverflow.com/a/44646697/7331395) –

+0

@dkackman在这些链接中,如果我一次读取所有图像(比如列表中)那些许多图像将一次在应用程序的内存中?如果是的话,那么我不想要这个。框架/库提供了什么,其中一次只有30-40个应用程序在应用程序内存中?我想这就是照片应用程序可能工作的方式。我不知道如何再次查询图像,如果用户再次上滚,然后再次下降。保持检查最后的图像等并不是一件容易的事情。微软必须在列表或网格视图或其他方面提供一些机制。我希望我能够澄清 – hellodear

回答

0

我认为当文件夹中的图像增加到10k时会很慢。

ListViewGridView默认进行虚拟化的用户界面为你,如果你没有设置任何击败UI虚拟化。详情请参考ListView and GridView UI optimization的“UI虚拟化”部分。所以你可能不需要太担心GridView的性能。

我们可以只加载30 &当用户向下滚动然后加载40多个图像?

为了满足这一要求,这似乎是需要的数据虚拟化是指this document

需要对数据集是如此之大,它不能或不应该全部是数据虚拟化的方法一次存储在内存中。将初始部分加载到内存中(从本地磁盘,网络或云),并将UI虚拟化应用于此部分数据集。您可以稍后加载数据,或从主数据集中的任意点(随机访问)按需加载数据。

您可以随意通过数据虚拟化以增量方式加载数据。详细信息请参考Data virtualization official sample。此示例使用自定义数据源在默认图片文件夹的内容上展示数据虚拟化。

相关问题