如何优化多个相同的图像

本文关键字:图像 何优化 优化 | 更新日期: 2023-09-27 18:25:42

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

如何优化多个相同的图像

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

例如

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图像资源其讨论了相同的问题。

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