返回首页


亲爱的读者,
在这篇文章中,我将谈论使用空空类型(REF类型居多)检查内部联合运营商或通过,如果条件。
空联合运营商在C#是什么??可以使用如下所示:

String SomeValue;

var res = SomeValue ?? null

现在,让我们深入的IL的内部,如果下面的代码生成的IL是:{C}
的IL如下所示:
{S0的}
正如你可以看到从上面的IL代码,17-23行代码为空联合运营商和来自25行吗??30如果条件。正如你可以看到由编译器生成的IL指令数,即是几乎相同的。 〜6两个条件语句的操作码。因此,在逻辑上,它看起来既像没有任何运行时间为我们的性能优势。
因此,人们可能不知道,要使用哪一个?我会说,你不能有其他部分空联合经营的条件。因此,在这种情况下,你不能使用空合并条件检查。
,但在结束之前,让我们也对他们做一些运行时的性能分析。为此,我已经写了这以下的测试代码:
(点击图片更好的视野)

每1000次迭代上面的测试代码,这是我所得到的结果:
{A}
正如你可以看到从多个输出样本,它表明,第一个样本输出花更多的时间。我猜这是因为许多对象都必须创建以来首次应用负载。所以它更好地放弃范例。但每其余4个样本而言,它表明,性能输出为空(所有值在蜱)凝聚的是位比如果条件之一。
现在让我们减少迭代到100每个看到的,它的行为。下面是输出:
{A2的}
同样,你可以看到,不同的是现在。虽然我跑了多次,并在两种情况下得到了类似的性能输出。
所以现在我们可以说,它更好地使用,如果条件检查对象为null,即使我们得到了一个小增益性能。
感谢放大器; {S4}的快乐编码
编辑:改变REF类型,即上面的代码中的字符串到一个可空的int后,我似乎得到相似的输出。因此,性能没有影响,这里的类型。| zenwalker1985

回答

评论会员:游客 时间:2012/02/06
第一次迭代设置一个结果,第二不。zenwalker1985:秒表并没有得到之前停止其蜱传递字符串串联
|即使这样做即停止,然后采取蜱再加上增加了身体,如果条件不改变结果。我仍然没有得到类似的结果。您可以检查更新我的博客。
感谢您的投票,以及{五}
评论会员:游客 时间:2012/02/06
mrjer:我认为,你缺少的赋值操作,结果=NULL具有相同的IL代码,你将有相同的性能,
zenwalker1985
评论会员:游客 时间:2012/02/06
我很抱歉,我忘了补充,以及。我测试条件,以及当我博客。输出/结果样品几乎是相似的,我的意思是,我仍然有B/W,如果空的差异,凝聚