如何比较.equals("")
和.IsNullOrEmpty
?我想知道哪两个更快。我听说过使用ticks但还不熟悉如何编写代码。
答案 0 :(得分:1)
您可以使用StopWatch
类来衡量代码的执行时间。启动秒表,运行几千次迭代,停止并查看已用时间。对其他实现执行相同的操作。另外,请确保尝试一些边缘情况,例如比较null
或空字符串甚至是非常长的字符串。只需将"foo"
十几次与""
进行比较就无法证明任何事情。
请注意,答案很可能与您的问题完全无关。您可以更好地花时间改进代码的其他部分。
答案 1 :(得分:1)
机会是isNullOrEmpty更快,因为它是特殊目的。正如其他已发表评论的人所指出的那样,这是一个非常微不足道的优化。
答案 2 :(得分:1)
以下列方式使用StopWatch
:
// Create new stopwatch
Stopwatch stopwatch = new Stopwatch();
// Begin timing
stopwatch.Start();
// Do something here
// Stop timing
stopwatch.Stop();
答案 3 :(得分:1)
正如其他人所说,这是过早的优化,可能不值得你花时间。但是,为了答案,你可以这样做:
using System;
using System.Diagnostics;
namespace ConsoleApplication1 {
class Program {
static void Main(string[] args) {
int COUNT = 1000000000;
String str = "Something";
Stopwatch sw = Stopwatch.StartNew();
sw.Start();
for (int i = 0; i < COUNT; i++) {
if (str.Equals("")) {
}
}
Console.WriteLine(sw.ElapsedTicks);
sw = Stopwatch.StartNew();
sw.Start();
for (int i = 0; i < COUNT; i++) {
if (String.IsNullOrEmpty(str)) {
}
}
Console.WriteLine(sw.ElapsedTicks);
Console.ReadLine();
}
}
}
输出适合我:
21426768 // Equals("")
12365410 // IsNullOrEmpty() <-- faster
请注意,str.Equals("")
和String.IsNullOrEmpty(str)
不会给您相同的结果。显然,第一个会引发NullReferenceException,str
为空。