【问题标题】:ternary operator imbrication三元运算符叠置
【发布时间】:2011-05-13 20:48:27
【问题描述】:

我想知道:就这两个版本之间的性能而言,最好的指令是什么:

Background = Application.Current.Resources[condition ? BackgroundName1 : BackgroundName2] as Brush;

和:

Background = condition ? Application.Current.Resources[BackgroundName1] as Brush : Application.Current.Resources[BackgroundName2] as Brush;

有什么不同吗?如果是,哪个更好?

注意:BackgroundName1 & 2 只是字符串

【问题讨论】:

  • 你看过 IL 吗?第一个更容易阅读,它胜过所有其他问题,但“它有效吗?”恕我直言。
  • 使用更容易阅读和维护的内容。
  • 没关系。如果您有性能问题,那不会是导致它的代码行;如果您没有问题,担心这是过早的优化。
  • @michael:我确实有性能问题,我到处寻找我可以尝试在这里和那里获得一些时间......我承认我一定已经达到了一个里程碑......我是可能无法获得更多...无论如何谢谢:)

标签: c# wpf performance conditional-operator


【解决方案1】:

第一个更短,更易读。

它也更容易维护。
如果您稍后更改它以读取不同的资源字典,您可能会忘记更改第二个字典的后半部分。

第一个也更清楚地从同一个字典中读取。

【讨论】:

  • 谢谢。我确实有性能问题,虽然我并不真正相信有必要调整那条线,但只是出于好奇......
【解决方案2】:

首先:使用分析器找到最慢的东西。如果您遇到性能问题,那么花费数小时或数天的时间来使已经足够快的东西变得更快是没有意义的。

第二:您可以通过两种方式尝试并仔细测量以查看是否存在差异来确定问题的答案。不要问我们哪个更快;我们不知道,因为我们没有尝试过,也没有能力尝试。

【讨论】:

  • 实际上,我有理由确定他们会执行相同。这两种情况都执行一次强制转换、字典查找和属性获取器。除非他有邪恶的副作用,否则根本没有区别。
  • @SLaks:我很确定你是对的。正如我以前的开发经理常说的那样:“你确定要赌上你的车吗?”如果这些年来我学到了关于性能的一件事,那就是有时复杂系统的性能是非常违反直觉的。例如,我们最近正在调整一个受限于收集压力的系统,并发现当我们取消大量分配时,程序变得变慢。这些分配恰好以正确的方式对齐其他一些块......
【解决方案3】:

不要太沉迷于微优化!您将获得的性能增益将为零。最后选择更易读、更容易理解的代码。

【讨论】:

    【解决方案4】:

    没什么区别。

    【讨论】:

      猜你喜欢
      • 2018-05-01
      • 2011-07-11
      • 1970-01-01
      • 2018-09-10
      相关资源
      最近更新 更多