代码之家  ›  专栏  ›  技术社区  ›  SiN

未在wpf中指定控件名…性能影响

  •  7
  • SiN  · 技术社区  · 14 年前

    如果需要从后面的代码访问WPF控件,则需要提供 Name 属性。

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

    我的问题是:是否从 为控件提供名称属性?还是给页面上的所有控件命名是一个好习惯?

    1 回复  |  直到 14 年前
        1
  •  14
  •   Ray Burns    14 年前

    是的,不提供“name”属性肯定会提高性能。

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

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

    对于一个简单的控件,向控件添加一个名称可以将使用该控件的成本增加5%左右。这不是很多,但是为什么要浪费CPU周期和RAM在不必要的名称上呢?

    底线:如果你的对象不需要名字,就不要给它们命名。通常,控件的内容或绑定足以确定控件的用途。如果文档不够多,您可以随时使用XML注释,这是免费的。

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