我如何比较.equals("")
和.IsNullOrEmpty
?我想知道两者哪个更快。我听说过使用刻度,但还不熟悉如何编码。
问问题
146 次
4 回答
1
您可以使用StopWatch
该类来测量代码的执行时间。启动秒表,运行几千次迭代,停止它并查看经过的时间。对其他实现执行相同的操作。还要确保你尝试了一些边缘情况,比如比较null
或空字符串,甚至是很长的字符串。只是比较"foo"
十几次""
并不能证明什么。
请注意,答案很可能与您的问题完全无关。你的时间最好花在改进代码的其他部分上。
于 2012-06-22T06:22:03.850 回答
1
isNullOrEmpty 可能更快,因为它是特殊用途。然而,正如其他评论过的人指出的那样,这是一个非常微不足道的优化。
于 2012-06-22T06:22:12.963 回答
1
使用StopWatch
方式如下:
// Create new stopwatch
Stopwatch stopwatch = new Stopwatch();
// Begin timing
stopwatch.Start();
// Do something here
// Stop timing
stopwatch.Stop();
于 2012-06-22T06:24:10.557 回答
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
is null。
于 2012-06-22T07:46:02.110 回答