Wpf 硬编码的XAML比生成的XAML后面的代码快吗?

Wpf 硬编码的XAML比生成的XAML后面的代码快吗?,wpf,xaml,user-controls,itemscontrol,Wpf,Xaml,User Controls,Itemscontrol,我有一个WPF用户控件,它包含许多文本框和按钮。当前,每当创建控件实例时,这些文本框和按钮都会通过代码隐藏动态创建并加载到ItemsControl中。唯一硬编码的XAML是ItemsControl的声明 这有时会有点迟钝。如果我去掉ItemsControl并将文本框和按钮硬编码到usercontrol的XAML中,会更快吗?一般来说,遵循您正在使用的平台的最佳实践会更好;在代码隐藏中“手工”生成项目当然不是WPF中的一种。研究如何使用DataTemplates,并将艰苦的工作留给框架。这不是硬编

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


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

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

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

生成的代码:

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

生成的XAML(基本上是组成用户控件的代码和XAML的混合):

1) 编译器将代码部分转换为IL,将XAML转换为BAML
2) 您的IL在运行时被解释
3) 您的类在运行时是文件
4) 独角兽和魔法将两者融合在一起

第二个版本实际上在运行时有点慢(或者我听说过)。当然,这大大简化了流程,但您可以看到第二个版本更复杂,包含更多的unicorn内容。但事实是,从UI的角度来看,它们几乎是等价的

我想你的懒惰可能是由别的原因引起的。也许您实际上看到了第一次执行时的JIT延迟,或者代码中的其他因素可能会导致该过程花费更长的时间


不管怎样,我建议您以WPF方式创建WPF表单。使用绑定,如果需要动态创建UI,请查看ItemsControl和DataTemplates。这比你想象的要容易得多。

当然,速度没有太大的差别,但对于开发、调试等来说,代码隐藏并没有什么好处


试试看,自己看看。

你为什么不试着比较一下呢?我会的。我只是想知道为什么一个比另一个快有什么理论上的原因。谢谢。此后,我确定了几个可以使用数据模板代替代码的领域。我试试看,然后回来汇报。好的。我刚刚将一堆代码重新写入了一些精简的XAML(使用数据模板)。但速度并没有明显加快。我认为延迟是为我的各种ItemsControl生成ViewModels。如果需要,我会调查并发布另一个问题。