数据模板有多贵?

时间:2016-07-11 12:53:00

标签: c# wpf performance xaml datatemplate

我有performance problems,我正试图挖掘原因。

到目前为止,我不确定问题是什么,以及我的下一个假设是它的数据模板。问题:使用数据模板有多贵?

让我们看看单个数据模板有多贵。以下是mcve。

XAML:

<Window.Resources>
    <DataTemplate DataType="{x:Type local:Item}">
        <StackPanel>
            <TextBlock Text="{Binding Property1}" />

            ... we will add here more things to see difference
        </StackPanel>
    </DataTemplate>
</Window.Resources>
<ContentControl Content="{Binding Content}" />

CS:

class Item : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    public string Property1 { get; set; } = "1";
    public string Property2 { get; set; } = "2";
    public string Property3 { get; set; } = "3";
    public string Property4 { get; set; } = "4";
    public string Property5 { get; set; } = "5";
}

class ViewModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    public object Content { get; set; } = new Item();
}

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        DataContext = new ViewModel();
    }
}

以下是一些结果(使用VS Profiler测量 - 以ms为单位的应用程序时间轴):

Test Nb Ni  Presenter    Items                         Bindings
A    1  1   2.42 (0.57)                                1.8
B    5  5   3.37 (1.15)                                1.8, 0.07, 0.1, 0.05, 0.08
C    5  10  3.63 (1.27)  0.06, 0.07, 0.08, 0.04, 0.04  1.7, 0.08, 0.05, 0.06, 0.05
D    0  1   3.38 (0.6)   2.7

说明:

  • Nb - 绑定数量;
  • Ni - 项目数(元素);
  • 演示者 - 时间ContentPresenter(总/自我);
  • 项目 - 没有约束时间的项目(适用时);
  • 出价 - 具有绑定次数的项目(适用时)。
  • A - 是初始测试,只有一个TextBlock具有单Text个绑定。
  • B - 再添加4个TextBlock以将Text绑定到其他属性。
  • C - 添加了5个TextBlock静态Text="123"
  • D - 删除了1 TextBlock除静态文本以外的所有内容。

从我所看到的,模板本身需要0.5 ms。创建第一个项目需要付出很大的代价(为什么???)。

说实话,我不确定这种方法的正确性来衡量绩效。因此我的问题。我应该避免使用数据模板并开始使用旧的方式手动填充控件以获得性能还是什么?

0 个答案:

没有答案