我正在使用WPF转换器,并在性能方面想知道在下面的示例中使用类成员或局部变量会更好吗?转换器的最佳实践,以获得更好的性能
public object Convert(object value, Type targetType, object parameter,System.Globalization.CultureInfo culture)
{
if ((int)value == 1)
return (Color)ColorConverter.ConvertFromString("#FCD44E");
return (Color)ColorConverter.ConvertFromString("#FCD44E");
}
或:
Color _color1 = (Color)ColorConverter.ConvertFromString("#FCD44E");
Color _color2 = (Color)ColorConverter.ConvertFromString("#FCD666");
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if ((int)value == 1)
return _color1;
return _color2;
}
+1用于参数化。我根本不知道WPF,但我知道将颜色定义留给xml可能会更好。这可能比'private static readonly'字段的性能低。我可以想象这种差异不太可能被注意到。针对问题的最高性能解决方案并不总是最好的。不幸的是,这里需要反对ctor参数的属性。 – drstevens
@drstevens:在大多数情况下,这将具有大致相同的性能,因为通常只创建一个转换器实例作为资源,然后引用无论哪个需要,因此这些值也只能解析一次(区别在于额外的int被解析)。事实上,这些属性并不是什么问题,因为转换器通常不能被代码访问,甚至在某些模式下不可访问,所以值不应该被改变(如果那是相反的话;可以采取一些措施来确保这一点当然,如果一个人是偏执狂) –
:)有关财产的评论有些社论,我可能应该保留自己。在大量多线程环境中工作并查看其他语言中大量使用的模式后,我对C#中的属性产生了爱恨关系。它们是非常有用的,并且当不可变类型是可接受的并且更可取的时候,它们通常会使我们创建可变类型。我已经开始考虑使用物业而不是ctor params(除非绝对必要)来代码味道。 – drstevens