哪个更有效,“data.Length == 0”或“data == string.Empty”?

时间:2011-07-15 12:17:44

标签: c# string performance

我想检查变量字符串data是否包含空字符串。

效率更高,data.Length==0data==string.Empty

我忘了说,data已经过检查,但保证不是null

9 个答案:

答案 0 :(得分:13)

1亿次迭代的测试结果:

Equality operator ==:   796 ms 
string.Equals:          811 ms 
string.IsNullOrEmpty:   312 ms 
Length:                 140 ms  [fastest]
Instance Equals:       1077 ms 

source

答案 1 :(得分:11)

使用String.IsNullOrEmpty(data)而不是

答案 2 :(得分:2)

我会选择第三个,它不容易出错:

String.IsNullOrEmpty(data)

答案 3 :(得分:2)

我想说你应该使用String.isNullOrEmpty method来检查空值。

答案 4 :(得分:2)

这两项检查都不是你的瓶颈。但是,如果您选择第一个,如果字符串为null,则可能会遇到NullReferenceException。你不会遇到第二个问题。

答案 5 :(得分:2)

逻辑上,data.Length == 0更有效,因为它只是比较两个整数值,而data == String.Empty正在比较字符串(尽管非常短)。

但是,编译器或框架可能会进行一些优化,以最大限度地减少或消除任何差异。如果不运行自己的时序测试,很难做出绝对的陈述。

最后,我怀疑差异是否足以引起注意。

答案 6 :(得分:2)

最佳做法是使用String.IsNullOrEmpty(或者,如果符合您的要求,则使用.Net 4.0 - String.IsNullOrWhiteSpace)。

如果您致电s.Length,那么如果字符串为NullReferenceException,您将获得null。这意味着您需要检查if(s == null || s.Length == 0)。这将是最有效的,也可能是最快的,但您也可以使用String.IsNullOrEmpty

如果字符串为s == string.Emptynull与空字符串不同),

null将返回false。

在性能方面,不要再花时间考虑它。它几乎从不,永远,永远,永远不会影响性能。

答案 7 :(得分:2)

正如人们所提到的,使用.NET 4.0框架中引入的string.IsNullOrEmpty(str)string.IsNullOrWhiteSpace(str)

答案 8 :(得分:1)

使用String.IsNullOrEmpty()进行检查。