C#中“Equals”与“==”的速度比较

出处:http://www.cnblogs.com/ju2ender/archive/2010/03/21/1691033.html

最初接触C#时就一直疑惑,比较字符串的方法:“Equals”与“==”在比较时性能有什么区别呢?相信这个问题也曾困惑着许多人,那么我们就一起来探讨下:

比较一个string是否等于一个值,最初接触C#的人会这么写:

string  myStr = "value" ;
 
if  (myStr.Equals( "value" ))
{
 
}
 
if  (myStr == "value" )
{
     
}

然后,会有人笑你很菜,得知把要判断的value写在前面性能高些,要这样写:

string  myStr = "value" ;
 
if  ( "value" .Equals(myStr))
{
 
}
 
if  ( "value"  == myStr)
{
     
}

但或许他也只是从那个笑他很菜的前辈那里得知应该这样写,而正确与否、差别,没有真正自己去测试过。这里先不告诉大家上面“前辈”说的正确与否,我们来测试下:

public  class  Program
{
     public  static  void  Main( string [] args)
     {
         int  time = 100000000;
         int  start, end, i;
         bool  result;
         string  myStr = "that's funny" ;
 
         Console.Title = "Equals & == test" ;
 
        
         // True test 1 - string.Equals("value")
        
 
         // 获取程序开始后经过的毫秒数
         start = System.Environment.TickCount;
 
         // 判断一次是否相等几乎不需要时间,所以我们让计算机判断一亿次,
         // 这真是个天文数字,囧
         for  (i = 0; i < time; i++)
         {
             result = myStr.Equals( "that's funny" );
         }
         
         // 这里得到的就是用Equals方法时距离程序启动的毫秒数
         // 因此,只要用end减去start除以1000便是Equals方法所花费的秒数
         end = System.Environment.TickCount;
         Console.WriteLine( "True test 1 cost time: "  + (end - start) / 1000.0 + " s" );
 
        
         // True test 2 - "value".Equals(string)
        
 
         start = System.Environment.TickCount;
 
         for  (i = 0; i < time; i++)
         {
             result = "that's funny" .Equals(myStr);
         }
 
         end = System.Environment.TickCount;
         Console.WriteLine( "True test 2 cost time: "  + (end - start) / 1000.0 + " s" );
 
        
         // True test 3 - string == "value"
        
 
         start = System.Environment.TickCount;
 
         for  (i = 0; i < time; i++)
         {
             result = myStr == "that's funny" ;
         }
 
         end = System.Environment.TickCount;
         Console.WriteLine( "True test 3 cost time: "  + (end - start) / 1000.0 + " s" );
 
        
         // True test 4 - "value" == string
        
 
         start = System.Environment.TickCount;
 
         for  (i = 0; i < time; i++)
         {
             result = "that's funny"  == myStr;
         }
 
         end = System.Environment.TickCount;
         Console.WriteLine( "True test 4 cost time: "  + (end - start) / 1000.0 + " s" );
 
        
         // False test 1 - string.Equals("value")
        
 
         start = System.Environment.TickCount;
 
         for  (i = 0; i < time; i++)
         {
             result = myStr.Equals( "that's fun" );
         }
 
         end = System.Environment.TickCount;
         Console.WriteLine( "False test 1 cost time: "  + (end - start) / 1000.0 + " s" );
 
        
         // False test 2 - "value".Equals(string)
        
 
         start = System.Environment.TickCount;
 
         for  (i = 0; i < time; i++)
         {
             result = "that's fun" .Equals(myStr);
         }
 
         end = System.Environment.TickCount;
         Console.WriteLine( "False test 2 cost time: "  + (end - start) / 1000.0 + " s" );
 
        
         // False test 3 - string == "value"
        
 
         start = System.Environment.TickCount;
 
         for  (i = 0; i < time; i++)
         {
             result = myStr == "that's fun" ;
         }
 
         end = System.Environment.TickCount;
         Console.WriteLine( "False test 3 cost time: "  + (end - start) / 1000.0 + " s" );
 
        
         // False test 4 - "value" == string
        
 
         start = System.Environment.TickCount;
 
         for  (i = 0; i < time; i++)
         {
             result = "that's fun"  == myStr;
         }
 
         end = System.Environment.TickCount;
         Console.WriteLine( "False test 4 cost time: "  + (end - start) / 1000.0 + " s" );
 
         Console.ReadLine();
     }
}

上面通过8个小测试,逐一计算了各种写法在当判断结果为true与false情况下花费的时间,下面是运行5次所得到的结果:

2010-03-21 Sunday 007

下面列出5次测试结果的对比:

 true测试最快方式true测试最快方式与第二名的差距false测试最快方式false测试最快方式与第二名的差距
测试1"value" == string0.046 s"value".Equals(string)0.016 s
测试2"value" == string0.219 s"value".Equals(string)0.036 s
测试3string == "value"0.015 s"value".Equals(string)0.001 s
测试4string == "value"0.068 sstring.Equals("value")0.021 s
测试5string == "value"0.066 s"value".Equals(string)0.001 s

 

true测试:"value" == string领先总时间为0.265秒,string == "value"领先总时间为0.149秒;

false测试:"value".Equals(string)领先总时间为0.054秒,string.Equals("value")领先总时间为0.021秒。

 

现在我们暂时可以得到的结论是:true判断时,用"value" == string是最快的;false判断时,用"value".Equals(string)是最快的。

也就是说:一个判断true发生的情况多些时,用"value" == string;false发生的情况多些时,用"value".Equals(string)。

转载于:https://www.cnblogs.com/Uinkanade/articles/4186925.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值