哪个更高效,“data.Length==0”还是“data==string.Empty”?

4
我希望检查变量字符串 data 是否包含空字符串。
在以下两种情况下哪种更有效率,data.Length==0data==string.Empty
我忘了说,data已经被检查并保证不是 null

12
你为什么在意? - BoltClock
1
我想找到最佳实践,即使只有一点点的改进也可以。 - Second Person Shooter
2
@xport:在这种情况下,最好的做法是编写对代码读者更清晰的内容。因此,我会使用data==string.Empty。但这与性能无关... - Maximilian Mayerl
13
"最佳实践"在这里是找到真正影响性能的事物,并修复它们,而不是过于关注不重要的细节。 - Marc Gravell
1
我更担心可读性,而不是效率。它们可能都会执行相同的操作。 - tjg184
显示剩余9条评论
9个回答

13

1亿次迭代的测试结果:

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

来源


我猜 Length 会是最快的,结果我猜对了 :) 顺便说一句,不错的链接 :) - Petar Minchev
这对于任何示例来说似乎非常慢,我想知道这些测试是否是在 Pentium I 处理器上完成的。 - Jeff LaFay
@jlafay - 网站上的引用 - “我已经对这些if条件语句进行了每个1亿次迭代。” - Petar Minchev
@peer:这只是一个测试结果。如果你有疑问,可以进行自己的测试。 - BoltClock
5
顺便说一下,我更喜欢使用 string.IsNullOrEmpty()。虽然它可能是第二慢的(还不错),但在考虑错误时它是最安全的。 - Jeff LaFay
显示剩余7条评论

11

请使用String.IsNullOrEmpty(data)而非其他方式。


2
我会选择第三个选项,因为它更少容易出现错误: String.IsNullOrEmpty(data)

2

2

两种检查方式都不会成为瓶颈。但是,如果您选择第一种方式,并且字符串为空,则可能会遇到NullReferenceException的问题。使用第二种方式则不会出现这个问题。


2

从逻辑上讲,data.Length == 0 更加高效,因为它只是比较两个整数值,而 data == String.Empty 则是在比较字符串(虽然非常短)。

然而,编译器或框架可能会进行一些优化,以最小化或消除任何差异。这使得很难在没有运行自己的计时测试的情况下做出绝对的说法。

最终,我怀疑差异不足以引起注意。


2
最佳实践是使用 String.IsNullOrEmpty (或者如果符合要求,可以从 .Net 4.0 开始使用 String.IsNullOrWhiteSpace)。
如果你调用 s.Length 并且字符串为 null,你会得到一个 NullReferenceException。这意味着你需要检查 if(s == null || s.Length == 0)。这将是最有效和可能是最快的方法,但你也可以使用 String.IsNullOrEmptys == string.Empty 如果字符串为 null,则返回 false(null 不同于空字符串)。
在性能方面,不要再花时间考虑它了。它几乎永远不会影响性能。

2

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


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接