硬编码XAML比代码隐藏生成的XAML更快吗?

时间:2010-10-13 11:45:32

标签: wpf xaml user-controls itemscontrol

我有一个WPF用户控件,其中包含许多文本框和按钮。目前,只要创建控件的实例,这些文本框和按钮都会通过后面的代码动态创建并加载到ItemsControl中。唯一的硬编码XAML是ItemsControl的声明。

有时这可能有点迟钝。如果我摆脱ItemsControl并将文本框和按钮硬编码到usercontrol的XAML中会更快吗?

3 个答案:

答案 0 :(得分:6)

通常最好遵循您正在处理的平台的最佳实践;在代码隐藏中“手动”生成项目肯定不是WPF中的其中之一。研究使用DataTemplates并为框架留下艰苦的工作。这不是硬编码 - 你仍然会提供项目(如果你必须在代码后面,但最好通过绑定),ItemsControl将使用适当的DataTemplates“装扮”提供给其ItemsSource的项目。这通常会更快,即使只是因为虚拟化是自动处理的(取决于您正在使用的实际控件,但大多数ItemsControl都这样做。)

答案 1 :(得分:1)

两个选项:使用代码生成对象图,或使用XAML。

生成代码:

1)编译器将您的代码转换为IL
2)您的IL在运行时由CLR解释 3)您的对象图是在代码执行时创建的

生成XAML(基本上是构成UserControl的代码和XAML的混合):

1)编译器将代码部分转换为IL,将XAML转换为BAML
2)你的IL在运行时解释了 3)您的课程在运行时为constructed from the BAML文件
4)Unicorns和魔术合并两个

第二个版本在运行时实际上有点慢(或者我听说过)。当然,这是对流程的一个很大的简化,但你可以看到第二个版本涉及更多,并且有更多的独角兽内容。但事实是,从UI的角度来看,它们几乎是等价的。

我认为你的懦弱可能是由别的东西引起的。也许您实际上看到JIT从第一次执行开始滞后,或者代码中的其他因素可能导致该过程花费更长时间。

无论我建议您使用WPF方式创建WPF表单。使用绑定,如果需要动态创建UI,请查看ItemsControls和DataTemplates。它比你想象的容易得多。

答案 2 :(得分:0)

当然没有很大的速度差异,但对于开发,调试等代码背后的好一点。

尝试Xaml Generator,亲眼看看。