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

2023-11-25

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

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

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


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

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

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

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

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

我不得不说这是一个非常bad习惯命名所有控件,不仅是因为成本,还因为它鼓励您通过名称引用控件,而不是使用正确的视图模型和绑定技术。我的大部分 XAML 都不使用“Name”any控制,更不用说全部了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 WPF 中未指定控件名称...性能影响 的相关文章

  • 为什么直接内存“数组”的清除速度比通常的 Java 数组慢?

    我建立了一个 JMH 基准来衡量什么会更快Arrays fill与空 System arraycopy从空数组中 将 DirectByteBuffer 归零或将unsafe内存块试图回答这个问题question https stackove
  • TargetType="controlType" 和 TargetType="{x:Type controlType}" 之间的区别

    在 WPF 中 您可以设置TargetType类型的名称 或者您可以将其设置为 x Type nameOfType 有谁知道有什么区别 没有什么 由于属性类型是Type XAML 解析器知道尝试将您提供的任何内容转换为Type 在其他情况下
  • MultiDataTrigger 使用 OR 而不是 AND

    我正在尝试设置多个DataTriggers on my Button 我做了一些研究发现MultiDataTrigger允许您执行此操作 我想要Visibility我的财产Button如果设置为 falseCCTVPath string E
  • WPF 元素宿主内存泄漏

    我在 Windows 窗体上使用元素主机时遇到奇怪的内存泄漏 我有一个主窗体 它打开另一个窗体 该窗体上只有 elementhost 控件 此时 它没有 wpf 控件子控件 只能打开 1 个主机表单 每次我打开窗体时 应用程序内存都会增加2
  • 非阻塞方法中的饥饿

    一段时间以来 我一直在阅读有关非阻塞方法的内容 这是一段所谓的无锁计数器的代码 public class CasCounter private SimulatedCAS value public int getValue return va
  • 我可以禁用特定控件的键盘输入吗?

    是否可以禁用控件的键盘输入 例如一个ListView 我怎么做 我尝试过覆盖KeyUp KeyDown事件 但显然不是这样的 IsEnabled是一个很好的解决方案 但是我只想禁用键盘交互并保持鼠标交互不变 处理KeyDown事件来得太晚了
  • 即使在 GC Collect 和 WaitForPendingFinalizers 之后,窗口对象在关闭后也未释放?

    这是一个简单的测试应用程序 可帮助了解 WPF 内存使用情况 我想了解的关键是为什么MainWindow即使在关闭并等待 GC 完成之后 仍然被引用并且它的内存没有被释放 参见下面的代码清单 文本 MainWindow Finalizer
  • 方法调用中是否有记忆约定?

    我想避免在方法调用中重新评估值 直到现在 我一直在这样做 def some method some method begin lot s of code end end 但它最终变得非常丑陋 在一些代码中 我看到类似以下内容 def som
  • 为什么 Android Eclipse 不断刷新外部文件夹并花费很长时间?

    我只有一部新的 Android 手机 我一直在修补一些基本的应用程序 每当我保存任何内容时 Eclipse 的 Android 插件就会刷新外部文件夹 这让我抓狂 通常我不会介意 但当需要 10 秒才能刷新时 我开始注意到 我已经搜索过 其
  • WP8.1 C# 绑定联系人图像

    信息很简单 我正在尝试创建一个可以显示用户联系人的应用程序 我也是一名自学成才的程序员 所以我在某些方面有编程经验 但总体来说我对数据绑定相对较新 首先 我有一个 ListView 控件 其中包含图像绑定
  • iOS 自定义单元格设计放在哪里? awakeFromNib 还是 cellForRowAtIndexPath?

    所以 基本上我用笔尖做了一个定制单元 希望我应用一些定制设计 比如颜色和阴影 我发现了两种应用样式的方法 awakeFromNib override func awakeFromNib super awakeFromNib Containe
  • 获取代码中的绑定结果

    我可能正在以错误的方式寻找这个 但是 有没有办法通过代码获取绑定的结果值 可能是一些显而易见的东西 但我就是找不到它 您只需致电ProvideValue的绑定方法 困难的部分是你需要通过有效的IServiceProvider到方法 编辑 实
  • 对于双核手机,availableProcessors() 返回 1

    我最近购买了一部 Moto Atrix 2 手机 当我尝试查看手机中的处理器规格时 Runtime getRuntime availableProcessors 返回 1 proc cpuinfo 也仅包含有关处理器 0 的信息 出于好奇
  • ASP.NET MVC 和 Expression XAML - 如何集成?

    一些背景 ASP net MVC 主要是构建和开发 ASP NET 应用程序方式的范式转变 从 代码隐藏 类型的心态转变为更像标准 MVC Ruby on Rails 的心态 我赞扬它作为一种简化工具来简化单元测试和代码分离 尽管 html
  • 网格内的 ContentPresenter 可见性绑定不起作用?

    我有以下网格
  • 您是否标记 UIView 或将它们保留为属性?

    这主要是一个风格问题 但自从我开始为 iPhone 编程以来 我一直很好奇其他人的想法是什么 当您的 iPhone 应用程序中有一个 UIView 并且需要在应用程序的其他位置访问它时 通常在视图控制器中的另一个函数中 您是否喜欢用整数标记
  • 有谁知道一种更快的方法来执行 String.Split() 吗?

    我正在读取 CSV 文件的每一行 并且需要获取每一列中的各个值 所以现在我只是使用 values line Split delimiter where line是保存由分隔符分隔的值的字符串 衡量我的表现ReadNextRow我注意到它花费
  • 从 xaml 获取 RowIndex

    我有一个带有 DataGridTemplateColumns 的 DataGrid 在 TemplateColumn 中 我使用工作正常的 DataTrigger 它从 DataGrid 父级检索项目计数
  • WPF DataGrid 多选

    我读过几篇关于这个主题的文章 但很多都是来自 VS 或框架的早期版本 我想做的是从 dataGrid 中选择多行并将这些行返回到绑定的可观察集合中 我尝试创建一个属性 类型 并将其添加到可观察集合中 它适用于单个记录 但代码永远不会触发多个
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla

随机推荐

  • 是否可以在 asp.net web api 中将模型与上传文件绑定?

    该模型 public class UploadFileModel public int Id get set public string FileName get set public HttpPostedFileBase File get
  • React 16 中的类与类名

    我看到 React 16 允许将属性传递到 DOM 那么 这意味着可以使用 class 来代替 className 对吧 我只是想知道除了向后兼容以前版本的 React 之外 仍然使用 className 是否还有其他优点 class是 j
  • 为什么访问 Activity 内 Fragment 的 TextView 会抛出错误

    MainActivity class all necessary imports public class MainActivity extends AppCompatActivity implements NavigationView O
  • JPA中CascadeType.REMOVE和orphanRemoval有什么区别?

    有什么区别 OneToMany cascade REMOVE mappedBy customer public List
  • 使用 Ember (cli) 如何进行验收测试以等待承诺?

    在我的 Ember 应用程序中 我目前有一个模型findResults返回一个承诺的函数 该承诺包装了 Google Places 库以获取自动完成的结果 为了在我的 UI 中使用它 我设置了一个 PromiseMixin 控制器 我指示控
  • Selenium Python:如何在弹出窗口中向下滚动

    我正在从事 Linkedin 网络抓取项目 我正在尝试获取某人感兴趣的公司列表 请注意 我没有使用 API 这是一个动态网站 因此我需要向下滚动 同时抓取公司名称 我知道如何在主窗口中执行此操作 但由于兴趣是一个弹出窗口this滚动不起作用
  • 如何获取设备型号? [复制]

    这个问题在这里已经有答案了 如何获取设备型号名称 我有一台 Yuphoria 5010 设备型号中显示 YU5010 我想获取设备的全名 我想要获取下面给出的确切字符串 尤佛利亚 5010 6 0 棉花糖 其实很简单 只需要调用 Strin
  • 当我退出程序时以编程方式关闭 GPS

    我已经通过编程方式启动了我的 GPS 意图 myIntent 新意图 Settings ACTION SECURITY SETTINGS mContext startActivity myIntent 当我退出程序时如何关闭 GPS 尝试这
  • RIA 服务 OData“不允许查询选项。”

    我有一个由 RIA 自动创建的 OData 端点 它似乎适用于简单的 获取 查询 E g http xxx Service BusinessApplication1 Web DomainService1 svc odata ProductS
  • 使用 $ORIGIN 指定 ELF 二进制文件中的解释器不起作用

    我在用着patchelf修改 rpath 和已编译二进制文件的解释器 对 patchelf 的调用如下所示 patchelf set interpreter ORIGIN lib ld linux x86 64 so 2 set rpath
  • 转储 ChartJS 数据中缺失的日期

    假设我将使用 ChartJS 中的折线图 并且我有 按日期计算的值 数据 例子 5 05 11 2014 10 04 11 2014 55 01 11 2014 该图表将包含 3 个点 有没有任何解决方案 配置可以让我自动添加 转储 缺失日
  • 编写 repr 方法

    情况 我是Python新手 目前正在尝试学习诀窍 我尝试创建一个链表类来帮助更好地理解该语言及其结构 我知道 repr 函数基本上应该返回相同的东西 str 但我不确定实际的区别是什么 到目前为止 这是我的课程 class LinkedLi
  • 如何声明多个变量?

    这是字母 letters ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 我用这个列出了它的清单 chars for i in letters chars app
  • 将文本安全转换为 XML

    我的 SQL Server 2005 数据库中有超过一百万行 其中一个文本列包含 XML 字符串 我想将文本转换为 XML 数据类型 以便提取部分数据 问题是有些记录在转换时会抛出错误 即无效的 XML 如何忽略这些错误 以便正确转换所有有
  • 检索 Groovy 闭包/方法参数列表

    我们如何通过参数数组以 javascript 风格动态检索 groovy 中闭包 方法的参数列表 举例来说 我想以这种方式记录一条消息 def closure name id gt log debug Executing method wi
  • 如何删除所有控件的全局 FocusVisualStyle?

    我遇到了同样的问题全局停用 FocusVisualStyle 但所有答案都不起作用 所以 我只想设置我的应用程序中的所有控件FocusVisualStyle x Null 任何 实现这一目标的有效方法是什么 我不想单独设置每个控件 将其放入
  • 网络聊天应用程序 - ASP.NET/Jabber/Ajax/WCF/Comet/ReverseAjax - 面临的问题 - 寻求见解

    在过去的三周里 我一直在尝试构建一个基于网络的聊天应用程序 但我在构建它时遇到了任何路线 编程技术 技术 的问题 我在下面解释了我遇到的所有问题 请提供您对此的任何见解 ASP NET AJAX 第一个问题是不是真正的实时 如果客户端每 x
  • 跨域网址

    我试图在我的 javascript 代码中调用这个 URL 这是我的 JavaScript 代码 ajax url http api addressify com au address autoComplete type GET cross
  • ES6 类的 jest.mock 产生 ReferenceError: require is not Defined

    我正在尝试在我的 ES6 javascript 项目中使用 jest 创建一个自动模拟 我正在使用节点v15 0 1 还有开玩笑26 6 0在Ubuntu上18 04 5 我有一个包含以下代码的测试文件 import RenderBuffe
  • 在 WPF 中未指定控件名称...性能影响

    如果需要从后面的代码访问 WPF 控件 则需要提供Name在 XAML 中为其添加属性 在许多情况下 您不需要从后面的代码访问控件 因为许多编码逻辑 例如绑定 最好直接在 XAML 中应用 我的问题是 是否有性能提升not向控件提供名称属性