.NET深入学习笔记(2):C#中判断空字符串的4种方法性能比较与分析2011-01-06 csdn 清清月儿写的一篇关于字符串为空判断方法的性能分析文章,实验结果作者已经给出,结论是使用.length==0判断的效率最高,但是文章的结尾只有一句话,感觉不够详细,所以自己写下这个文章,算一个补充和学习吧.程序代码执行的硬件环境:
CPU | Intel T2300 1.66GHz |
内存 | Kingston DDR2 667 1G |
硬盘 | 80G 5400转 8m |
测试的软件环境:
OS | Windows XP Pro |
IDE | VS 2008 RTM |
测试的代码如下:定义了3个变量,分别调用4种方法,进行100w次判断,记录测试时间:
Stopwatch sw = new Stopwatch();//实例化一个对象,记录时间
string sEmpty1 = string.Empty;//实例化3个字符串对象,赋值如下。分别作空比较试验
string sEmpty2 = "";
string sEmpty3 = "StringNotEmpty";
////////////////////////////////////////////////////Test sEmpty1///////////////////////////
sw.Start();//开始记录
for (int i = 0; i <= 1000000; i++)
{
if (sEmpty1.Length == 0)
{ }
}
sw.Stop();//停止记录时间
Console.WriteLine("string.Empty Length == 0 Time Cost is {0}", sw.ElapsedMilliseconds);
////////
sw.Reset();//重置计数器为0;
sw.Start();
for (int i = 0; i <= 1000000; i++)
{
if (sEmpty1 == "")
{ }
}
sw.Stop();
Console.WriteLine("string.Empty == "" Time Cost is {0}", sw.ElapsedMilliseconds);
////
sw.Reset();
sw.Start();
for (int i = 0; i <= 1000000; i++)
{
if (sEmpty1 == string.Empty)
{ }
}
sw.Stop();
Console.WriteLine("string.Empty == string.Empty Time Cost is {0}", sw.ElapsedMilliseconds);
sw.Reset();
sw.Start();
for (int i = 0; i <= 1000000; i++)
{
if(string.IsNullOrEmpty(sEmpty1))
{}
}
sw.Stop();
Console.WriteLine("string.IsNullOrEmpty Time Cost is {0}", sw.ElapsedMilliseconds);
Console.WriteLine();
////////////////////////////////////////////////////Test sEmpty2///////////////////////////
sw.Reset();
sw.Start();
for (int i = 0; i <= 1000000; i++)
{
if(sEmpty2.Length == 0)
{}
}
sw.Stop();
Console.WriteLine(""" Length == 0 Time Cost is {0}", sw.ElapsedMilliseconds);
////////
sw.Reset();
sw.Start();
for (int i = 0; i <= 1000000; i++)
{
if(sEmpty2 == "")
{}
}
sw.Stop();
Console.WriteLine(""" == "" Time Cost is {0}", sw.ElapsedMilliseconds);
/////
sw.Reset();
sw.Start();
for (int i = 0; i <= 1000000; i++)
{
if(sEmpty2 == string.Empty)
{}
}
sw.Stop();
Console.WriteLine(""" == string.Empty Test3 Time Cost is {0}", sw.ElapsedMilliseconds);
/////
sw.Reset();
sw.Start();
for (int i = 0; i <= 1000000; i++)
{
if(string.IsNullOrEmpty(sEmpty2))
{}
}
sw.Stop();
Console.WriteLine(""" string.IsNullOrEmpty Time Cost is {0}", sw.ElapsedMilliseconds);
Console.WriteLine();
////////////////////////////////////////////////////Test sEmpty3///////////////////////////
sw.Reset();
sw.Start();
for (int i = 0; i <= 1000000; i++)
{
if(sEmpty3.Length == 0)
{}
}
sw.Stop();
Console.WriteLine(""StringNotEmpty" Length == 0 Time Cost is {0}", sw.ElapsedMilliseconds);
////////
sw.Reset();
sw.Start();
for (int i = 0; i <= 1000000; i++)
{
if(sEmpty3 == "")
{}
}
sw.Stop();
Console.WriteLine(""StringNotEmpty" == "" Time Cost is {0}", sw.ElapsedMilliseconds);
////
sw.Reset();
sw.Start();
for (int i = 0; i <= 1000000; i++)
{
if(sEmpty3 == string.Empty)
{}
}
sw.Stop();
Console.WriteLine(""StringNotEmpty" == string.Empty Test3 Time Cost is {0}", sw.ElapsedMilliseconds);
////
sw.Reset();
sw.Start();
for (int i = 0; i <= 1000000; i++)
{
if(string.IsNullOrEmpty(sEmpty3))
{}
}
sw.Stop();
Console.WriteLine(""StringNotEmpty" IsNullOrEmpty Time Cost is {0}", sw.ElapsedMilliseconds);