如何优化许多相同的图像?

时间:2012-02-25 14:55:30

标签: c# .net wpf xaml

我有一张桌子,许多行包含相同的图标<Image Source="{Binding Icon}" />(有一组6个可能的图标)。我注意到表刷新需要花费大量时间,因为这些图标(它们似乎每次都会重新生成)。在我的程序表中经常刷新 - 一次在3秒内。有没有办法优化这个?也许将图标声明为资源,以便它只加载一次。

2 个答案:

答案 0 :(得分:4)

我建议您确保每个视图模型只创建一次图标/图像(如果可能的话,我并不热衷于使用静态变量)。您还应该在资源上调用Freeze()以获得最佳性能。

e.g。

public class MultipleIconsViewModel
{
    private BitmapImage _icon;

    public ImageSource Icon
    {
        get
        {
            if (_icon == null)
            {
                _icon = new BitmapImage(new Uri(@"..\images\myImage.png", UriKind.RelativeOrAbsolute));

                // can't call Freeze() until DownloadCompleted event fires.
                _icon.DownloadCompleted += (sender, args) => ((BitmapImage) sender).Freeze();
            }

            return _icon;
        }
    }
}

另见本帖:WPF image resources 它讨论了同样的问题。

答案 1 :(得分:2)

Icon属性在做什么?如果它每次创建一个新的ImageSource,那将解释性能不佳。如果您的图标是共享的,您可以静态地(作为单例)公开它并使用它的一个实例。