2014-12-02 102 views
-1

考虑下面的C#示例。哪个会更有效率? 我很想知道重复的'if'条件检查是否比直接赋值更昂贵。哪个更昂贵 - 总是赋值或检查空值,然后赋值

在我的代码中,我遇到了情况 - 每当用户请求被接收时,都会执行一段代码。我想设置一个特定的全局键值,我想用于后续日志记录(null会被记录直到有值)。问题是可以在任何无法确定的请求中接收密钥的值,一旦设置了,我不需要再设置该值。

下面的while循环只是为了模拟所有用户请求的重复代码执行。 '价值'属性将在一些请求中设置。

var data = new Dictionary<string, string>(); 
var value = null; // some data received from user that later set the value 
var i = 0; 
while (i < 1000) 
{ 
    if(data["key"] == null) 
    { 
     data["key"] = value; 
    } 

} 

vs 

while (i < 1000) 
{ 
    data["key"] = value; 
} 
+0

也许这可能有所帮助:http://stackoverflow.com/q/4586795/1693085和一个答案,也许:http://stackoverflow.com/a/4587052/1693085 – 2014-12-02 20:29:31

+7

尝试两个和措施。然后你就会知道。 – Servy 2014-12-02 20:29:42

+1

你必须测量它以确定它。 [如果你有两匹马,并且你想知道哪两匹马跑得快,那就马匹比赛。](http://ericlippert.com/2012/12/17/performance-rant/) – Habib 2014-12-02 20:30:34

回答

2

正确的答案是'它取决于'。编译器对您的代码应用了太多优化。所以很难预测生成的IL代码是怎样的。 但总的来说操作比两个快。特别是在使用执行散列计算逻辑来通过键找到值的字典的情况下。

0

在这个例子中,'if'对于字典查找性能可忽略不计。所以案例2应该更快,因为你只做一次字典查找。