C# UWP FlipView来自URI的图像(Web)
实际上,我有一个带有图像URI的列表。在foreach循环中,我从这些URI创建图像对象,如下所示:C# UWP FlipView来自URI的图像(Web),c#,.net,win-universal-app,windows-10-universal,flipview,C#,.net,Win Universal App,Windows 10 Universal,Flipview,实际上,我有一个带有图像URI的列表。在foreach循环中,我从这些URI创建图像对象,如下所示: foreach (Uri imageUri in uriList) { BitmapImage bmi = new BitmapImage(new Uri(imageUri)); Image image = new Image(); image.source = bmi; flipView.Items.Add(image); } 现在的问题是,如果有很多图像(
foreach (Uri imageUri in uriList)
{
BitmapImage bmi = new BitmapImage(new Uri(imageUri));
Image image = new Image();
image.source = bmi;
flipView.Items.Add(image);
}
现在的问题是,如果有很多图像(100-200),那么在快速浏览FlipView时,RAM的使用率非常高。我还看到,每个图像都将被“缓存”或其他东西,因此如果我返回FlipView,将不会产生更多的互联网流量
所以我的问题是,这是正确的方法吗,或者有更好的方法从网络图像中获取“图像库”吗
问候您翻转视图不用于显示大量项目。您应该改用水平列表视图
首先,需要修改ListView的样式,将HorizontalSnapPointsType属性更改为MandatorySingle(这样图像可以像翻转视图一样捕捉到正确的位置)。单元格的宽度应等于flipview的旧宽度,以确保翻转视图不用于显示大量项目。您应该改用水平列表视图
首先,需要修改ListView的样式,将HorizontalSnapPointsType属性更改为MandatorySingle(这样图像可以像翻转视图一样捕捉到正确的位置)。单元格的宽度应等于flipview的旧宽度,以确保From,
flipview
最适合不超过25个项目(图像)的集合
您最好将“数据虚拟化”添加到FlipView中,例如:
<FlipView>
<FlipView.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</FlipView.ItemsPanel>
</FlipView>
关于要“缓存”的图像,这是正常的,默认情况下,位图图像会缓存图像。从,FlipView
最适合不超过25个项目(图像)的集合
您最好将“数据虚拟化”添加到FlipView中,例如:
<FlipView>
<FlipView.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</FlipView.ItemsPanel>
</FlipView>
关于图像被“缓存”,这很正常,默认情况下,位图图像会缓存图像。“flip view不支持虚拟化”你怎么能这么肯定?!我认为他是正确的,我已经测试过了,内存使用率仍然很高。但是如何使用与FlipView具有相同行为的ListView?首先,您需要修改ListView的样式,将HorizontalSnapPointsType属性更改为MandatorySingle(以便图像可以像flip视图一样捕捉到正确的位置)。单元格的宽度应等于flipview的旧宽度,以确保:。很抱歉,遗漏了信息,FlipView的默认ItemsPanelTemplate是VirtualzingStackPanel,它确实支持虚拟化。好的,这正在工作,谢谢。但我不知道如何使项目的宽度延伸到屏幕的宽度。我已经测试了ListView和ListViewItem样式中的多个参数,但是这些项目要么宽度小于,因此我已经看到了下一个项目,要么宽度更大。如何实现这一点?必须将项目的宽度绑定到静态值(例如:屏幕宽度)。很高兴它为你工作,你能考虑接受它作为答案吗?“翻转视图不支持虚拟化”你怎么能如此确定?!我认为他是正确的,我已经测试过了,内存使用率仍然很高。但是如何使用与FlipView具有相同行为的ListView?首先,您需要修改ListView的样式,将HorizontalSnapPointsType属性更改为MandatorySingle(以便图像可以像flip视图一样捕捉到正确的位置)。单元格的宽度应等于flipview的旧宽度,以确保:。很抱歉,遗漏了信息,FlipView的默认ItemsPanelTemplate是VirtualzingStackPanel,它确实支持虚拟化。好的,这正在工作,谢谢。但我不知道如何使项目的宽度延伸到屏幕的宽度。我已经测试了ListView和ListViewItem样式中的多个参数,但是这些项目要么宽度小于,因此我已经看到了下一个项目,要么宽度更大。如何实现这一点?必须将项目的宽度绑定到静态值(例如:屏幕宽度)。很高兴它为你工作,你能考虑接受它吗?它不起作用,内存使用仍然很高,当擦拭快速通过项目和内存使用率仍然很高,如果我停止擦拭项目,它不工作,内存使用仍然很高,快速浏览项目时,如果我停止浏览项目,内存使用率仍然很高。我认为问题不可能存在于
FlipView
,将uri转换为Image
并添加到FlipView
,它会同时转换所有项目。也许您可以尝试转换图像粒子,例如,每次转换并添加20个图像到filpview,然后显示它。当用户进入第十个项目时,继续添加接下来的20个项目,以此类推?我已经用8个大图像测试了它,内存消耗也很大。我只是尝试使用FlipView
的ItemTemplate,直接将uri字符串作为图像控件的源代码,似乎有点快,但是有很多巨大的图像…我不确定这是否是一个好的做法。我现在不知道除了粒子显示…对不起。我认为问题不可能出在FlipView
上,将uri转换为Image
并添加到FlipView
,它会同时转换所有项目。也许您可以尝试转换图像粒子,例如,每次转换并添加20个图像到filpview,然后显示它。当用户进入第十个项目时,继续添加接下来的20个项目,以此类推?我已经用8个大图像测试了它,内存消耗也很大。我只是尝试使用FlipView
的ItemTemplate,直接将uri字符串作为图像控件的源代码,似乎有点快,但是有很多巨大的图像…我不确定这会是什么