2010-11-22 62 views
3

我想知道:什么是在这些两个版本之间性能方面的最佳指令:三元运算叠瓦

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

和:

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

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

感谢

NB:BackgroundName1 & 2只是弦乐器

+3

你看过IL吗?第一个比其他所有问题更容易阅读,但是“有用吗?”恕我直言。 – annakata 2010-11-22 14:02:34

+0

使用任何更容易阅读和维护的内容。 – PetPaulsen 2010-11-22 14:02:48

+8

没关系。如果你有性能问题,那不会是导致它的代码行;如果你没有问题,担心这是过早的优化。 – 2010-11-22 14:03:01

回答

5

第一个更短,更具可读性。

它也更容易维护。
如果您稍后将其更改为读取其他资源字典,则可能会忘记更改第二个字段的后半部分。

第一个也是从同一本字典中读得更清楚。

+0

谢谢。我确实有性能问题,虽然我并不确信必须调整该线,但出于好奇... – David 2010-11-22 14:15:27

2

不要太过迷住微观优化!您将获得的性能增益将为零。寻找更易读,更易于理解的代码。

3

首先:使用探查器找到最慢的事情。如果你遇到性能问题,花几个小时或几天的时间来做更快的速度已经足够快了,这是没有意义的。

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

+0

其实,我相当肯定他们会执行_identically_。这两种情况都执行一次强制转换,字典查找和属性获取器。除非他有副作用,否则根本没有区别。 – SLaks 2010-11-22 15:30:07

+2

@SLaks:我很确定你是对的。正如我的老开发经理曾经说过的那样:“你确定你会把汽车押在它上面吗?”如果多年来我学到了一件关于性能的东西,那就是有时候复杂系统的表现是非常不直观的。例如,我们最近调整了一个受到收集压力限制的系统,并发现当我们拿走大量分配时,程序得到*较慢*。这些拨款恰好是以正确的方式排列其他区块... – 2010-11-22 16:41:08

+0

是的。 [这是另一个例子](http://stackoverflow.com/questions/3046805/why-is-dictionary-first-so-slow)。 – SLaks 2010-11-22 16:54:38