代码之家  ›  专栏  ›  技术社区  ›  thewpfguy

WPF性能

  •  3
  • thewpfguy  · 技术社区  · 16 年前

    我正在构建一个简单的照片库应用程序,在列表框中显示图像。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图像文件路径的字符串[]。

    当我使用总大小为11MB的10-11个图像时,总内存使用量会上升到500MB!!!我真的很惊讶,因为这只是一个简单的照片查看应用程序做什么。运行这个应用程序使我的机器无法使用。

    2 回复  |  直到 16 年前
        1
  •  2
  •   Community Mohan Dere    9 年前

    这里的一个关键可能是虚拟化。。。

    因此,通过转换器绑定图像,以返回较少的内存

    http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapimage.decodepixelwidth.aspx

    你也可以给 Dispose of Image in WPF in Listbox (memory leak)

        2
  •  1
  •   Will Dean    16 年前

    别忘了,当你加载一个压缩图像时(JPEG可能是非常压缩的),一旦加载,保存它所需的内存几乎总是基于它的未压缩状态。

    因此,如果先看文件大小,然后再考虑内存——你应该看图像像素大小——从长度x宽度x 4开始,这是一个粗略的经验法则——然后再重新考虑内存使用是否如此惊人。

    推荐文章