2012-02-25 42 views
2

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

回答

4

我建议确保您只为每个视图模型创建一个图标/图像(如果可能,我并不热衷于使用静态变量)。您还应该在资源上拨打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 image resources 其中讨论了同样的问题。

2

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

+0

图标只是一个字符串,指向像'/Images/icon.png'这样的嵌入式图像 – Poma 2012-02-25 15:05:48