未在WPF中指定控件名称...性能影响

SiN*_*SiN 7 wpf performance xaml coding-style

如果需要从后面的代码访问WPF控件,则需要Name在XAML中为其提供属性.

在许多情况下,您不需要从后面的代码访问控件,因为很多编码逻辑(如绑定)更好地直接应用于XAML中.

我的问题是:没有为控件提供name属性是否有性能提升?或者为页面上的所有控件命名是一个好习惯?

Ray*_*rns 14

是的,不提供"名称"属性肯定会带来性能提升.

WPF的"名称"机制可能很有用,但它以多种方式使用额外的RAM和CPU:

  1. XAML编译器为每个命名对象在类中分配一个额外的插槽(每个4个字节)
  2. XAML编译器将代码添加到您的类中以启动其中的每一个
  3. BAML处理器回调您的代码以在每种情况下初始化名称
  4. BAML处理器还将名称添加到字典中,每个名称需要额外的20多个字节
  5. 在查找您真正需要的名称时,您可能会遇到与您并不真正需要的名称的字典冲突

对于简单的控件,向控件添加名称可以将使用该控件的成本提高5%左右.这不是很多,但为什么浪费你的CPU周期和RAM不必要的名字?

底线:如果对象上不需要名称,请不要命名.通常,控件的内容或绑定足以识别控件的用途.如果这还不够,那么您可以随时使用免费的XML注释.

我不得不说,命名所有控件是一个非常糟糕的习惯,不仅仅是因为成本,还因为它鼓励您通过名称引用控件,而不是使用正确的视图模型和绑定技术.我的大部分XAML都没有对任何控件使用"Name" ,更不用说所有控件了.