- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
以下哪些 TextBlocks 的绑定(bind)会消耗更多性能:
<Window
x:Name="Me"
x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:src="clr-namespace:WpfApplication1"
Title="MainWindow">
<StackPanel>
<TextBlock Text="{Binding Title, ElementName=Me}"/>
<TextBlock Text="{Binding Title, RelativeSource={RelativeSource AncestorType={x:Type src:MainWindow}}}"/>
</StackPanel>
</Window>
ElementName
:Name
控件的属性应该比调用 GetType
花费更少的性能。 . Name
时放。 FindAncestor
:GetType
确定祖先类型; GetType 比简单的 Name
花费更多的性能。属性 getter (也许 DP 不同?)最佳答案
通过争论你认为哪个会更快来尝试回答这类问题通常是一个糟糕的主意。最好构建一个实验来测量它。
我稍微修改了您的设置 - 我将相关的 Xaml 放入 UserControl,并绑定(bind)到 Name
属性自 UserControl
没有 Title
属性(property)。然后我编写了一些代码来创建控件的新实例并将其添加到 UI,并使用 Stopwatch
测量构建和加载它所花费的时间。 (我在构建用户控件之前开始计时,并在用户控件引发其 Loaded
事件后停止。)
我从 DispatcherTimer
运行此代码每秒 20 次,因此我可以进行大量测量,以期减少实验误差。为了最大限度地减少由于调试和诊断代码造成的失真,我在 Release 版本中运行,我只在 2000 次迭代完成后计算和打印平均值。
在 2000 次迭代后,ElementName
接近平均887us。
在 2000 次迭代后,RelativeSource
接近平均959us。
所以ElementName
在这个特定的实验中,比 RelativeSource
稍微快一点.加载一个琐碎的UserControl
只需一个 Grid
和一个 TextBlock
其中只有一个命名元素,ElementName
方法看起来需要 92% 的时间来加载 RelativeSource
方法采取。
当然,我在这里测量一个小的人工示例。 ElementName 方法的性能可能会根据范围内命名元素的数量而有所不同。并且可能还有其他意想不到的因素可能会在实际场景中产生完全不同的结果。因此,如果您想获得更好的图像,我建议您在实际应用程序的上下文中执行类似的测量。
我用 10 个 TextBlocks 而不是 1 个重复实验。ElementName
然后平均 2020us 而 RelativeSource
方法平均为 2073us,两次测试再次超过 2000 次迭代。奇怪的是,这里有一个更小的差异,不仅仅是相对而言,而是在绝对方面——单元素示例显示出 72us 的差异,而十元素示例显示出 53us 的差异。
我开始怀疑我在我的主机上运行我的测试会导致更多的可变性,而不是用尽可能少的东西仔细配置以最小化噪音。
另一种变化:仍然有 10 个绑定(bind)文本 block ,我向用户控件添加了另外 10 个空的、未绑定(bind)的命名文本 block 。这里的想法是引入更多命名的东西 - ElementName
现在必须在 11 个命名事物中找到一个命名项目。 ElementName
的平均值现在是2775us。 RelativeSource
这些额外的 10 个命名元素的方法出现在 3041us。
再次,我怀疑我的台式机上的可变性 - RelativeSource
似乎很奇怪在这里的表现明显比在 ElementName
的情况下要差得多。的优势。
无论如何,似乎相当清楚的是,这里的加载成本对元素的数量比对您使用的绑定(bind)样式更敏感。 ElementName
显然有一个小优势但足够小(并且结果足够奇怪),足以让人怀疑得出它必然更快的结论的有效性。
所以我们可以构建更仔细的实验来获得更好的画面。但在我看来,如果你不能最终证明在普通计算机上运行时性能上有显着差异,那么争论哪个更快基本上是浪费时间。
所以总而言之:性能是错误的关注点。选择更易读的代码。
关于wpf - ElementName vs.RelativeResource?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4317097/
我的项目中有这个 xaml: // ... 我在 MyControl 类中定义了 IsEditing 依赖属性。 namespace MyNamespace { public pa
我有两个继承自 BaseClass 的子类。 我正在尝试对 BaseClass 类型 的对象使用反射来获取 XmlRootAttribute.ElementName 值。那么,如果有人传入一个 Bas
这是我的网址的一部分 Новый Афон Пицунда Гудаута Гагра Сухум 用户输入城市名称,例如:“Пицунда”,我
我创建了一个显示文件列表的 JTree。这些文件的长度不同。我想在 JTree 中以相同的长度显示它们,例如 20 个字符。如果名称大于 20 个字符,它应该出现在工具提示中。 如何实现?下面是我的
以下哪些 TextBlocks 的绑定(bind)会消耗更多性能: 我确信当 TextBlocks 处于具有许多 sibling 和祖先的高嵌套级别时,我的问
我正在对 Web 应用程序进行一些维护编码,我收到一个 javascript 错误,格式为:“[elementname] 没有属性” 部分代码是通过 AJAX 调用即时生成的,该调用更改了部分页面的
通过名称进行绑定(bind)自引用与通过 RelativeSource 进行自引用之间有什么区别? 例如: 相对 在我的项目中,它们的行为似乎相同,但我直接在窗口中使用它们。这意味着我立即更喜
我有以下 XAML: ... ...
根据x:Reference Markup Extension MSDN 页面,x:Reference References an instance that is declared elsewhere
我已将 MenuFlyout 添加到 ItemsControl.ItemTemplate 中的按钮。我也能够将当前项目绑定(bind)为 CommandParameter。现在我想将 Command
我正在使用 xml,并使用 xsd 来验证我的 xml 文件。我的 xsd 和 xml 文件太长,我可以给你其中的一部分。 XSD 文件: ...
我有一个 Datagrid,它有一个 DataGridTemplateColumn,其中包含一个 ListView,其 Itemsource 绑定(bind)到一个字符串数组。 在该 ListView
我正在尝试将类对象序列化为如下所示的 xml: 0,000 0,000 1,000 1,000 1,000 0,000 0,000 1,000 重要的是没有直
这是 XAML: 绑定(bind)返回错误:System.Windows.Data 错误:2:找不到目标元素的管理 Fram
我有两个 XSD 文件,我想要两个不同的 xsd 文件的元素具有相同的名称但具有不同的属性类型。 假设下面是xml1.xsd te
我有一个datagrid,在datagridtemplatecolumn中,我有一个togglebutton,在检查时,它会在elementName binding的帮助下打开弹出窗口。。
我想创建一个在后台执行操作并可通过托盘图标进行控制的应用程序。这个托盘图标有一个带有复选框的上下文菜单,可以将其设置为已启用,然后后台任务就会启动。 我正在使用 WPF 和 Hardcodet WPF
我正在尝试绑定(bind)一个依赖于同一 DataTemplate 中控件的属性。 举例说明:
我有一个应用程序,它让我可以选择通过 RessourceDictionary 更改应用程序主题,这意味着我只能使用纯 XAML。 现在,我想做的是隐藏一个 DockPanel,它没有 ElementN
使用传统的 {Binding} 语法时,您可以指定元素名称以指向页面上的特定控件,并能够访问其属性。例如,如果页面名为 page你可以这样做: {Binding ElementName=Page, P
我是一名优秀的程序员,十分优秀!