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

时间:2010-06-23 08:20:54

标签: wpf performance xaml coding-style

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

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

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

1 个答案:

答案 0 :(得分:14)

是的,不提供“名称”属性肯定会带来性能提升。

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

  1. XAML编译器为您的每个命名对象(每个4个字节)分配一个额外的插槽
  2. XAML编译器将代码添加到您的类中以启动每个
  3. BAML处理器回调您的代码以在每种情况下初始化名称
  4. BAML处理器还将名称添加到字典中,每个名称需要额外的20多个字节
  5. 在查找您真正需要的名字时,您可能会遇到与您并不真正需要的名字的字典冲突
  6. 对于简单控件,向控件添加Name可以将使用该控件的成本提高5%左右。这不是很多,但为什么浪费你的CPU周期和你的RAM不必要的名字?

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

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