我正在构建一个简单的相册应用程序,在一个列表框中显示图像。xaml是:
<ListBox x:Name="imageList" Margin="10,10" ItemsSource="{Binding}" Height="500">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding}" HorizontalAlignment="Left"></TextBlock>
<Image Source="{Binding}" Width="100" Height="100" HorizontalAlignment="Center"></Image>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>这里设置的DataContext是JPEG图像文件路径的string[]。
当我使用总大小为11MB的10-11图像时,总内存使用量将达到500MB!我真的很惊讶,因为这只是一个简单的照片查看应用程序,没有其他功能。运行这个应用程序会让我的机器变得非常不可用。
我在Vista上使用的是VS2010 express,.NET 4。谁能解释一下在后台发生了什么,这需要如此巨大的内存占用?可以做什么来优化它?
提前谢谢。
发布于 2010-07-09 15:27:20
这里的一个关键可能是虚拟化...
另一个关键字可能是BitmapImage的decodepixelwidth字段
因此,通过转换器绑定您的图像,以返回内存较少的图像的解码变体……
http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapimage.decodepixelwidth.aspx
发布于 2010-07-09 16:16:18
不要忘记,当您加载压缩图像( JPEG可能非常压缩)时,加载后保存它所需的内存几乎总是基于其未压缩状态。
因此,先查看文件大小,然后再考虑内存-您应该查看图像像素大小-从长度x宽度x 4作为粗略的经验法则-然后重新考虑内存使用是否如此惊人,这可能是非常具有误导性的。
https://stackoverflow.com/questions/3210589
复制相似问题