我有一张桌子,许多行包含相同的图标<Image Source="{Binding Icon}" />
(有一组6个可能的图标)。我注意到表刷新需要花费大量时间,因为这些图标(它们似乎每次都会重新生成)。在我的程序表中经常刷新 - 一次在3秒内。有没有办法优化这个?也许将图标声明为资源,以便它只加载一次。
答案 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
,那将解释性能不佳。如果您的图标是共享的,您可以静态地(作为单例)公开它并使用它的一个实例。