我正在使用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