查看文章
 
String.Empty和""到底有多大的差异?
2009年05月22日 星期五 15:46

String.Empty和""到底有什么区别?

严格的说,String.Empty是一个静态引用。

查看.net framework 下的 String.cs 源码,你会发现,微软是这么定义的。

        // The Empty constant holds the empty string value.

        public static readonly String Empty = "";

那么 string str1 = string.Empty; 和 string str2 = ""; 有什么异同呢?

一堆资料和所谓的面试题上都说""是分配内存空间的,Empty就不分配了。。。这个有点不靠谱。

其实吧,""相当于new了一个实例,再把这个实例赋值给str2,而Empty则是传递了一个静态引用。

真的有那些资料上说的那么玄吗?我们做个性能测试的例子就知道了。

        static void Main(string[] args)
        {
            String CountStr1;
            String CountStr2;
        
  
            DateTime dateStr1 = System.DateTime.Now;
            for (int i = 0; i < 5000000; i++)
                CountStr1 = "";
            DateTime dateStr2 = System.DateTime.Now;
            long StrResult = dateStr2.Millisecond - dateStr1.Millisecond;           
            Console.WriteLine("用双引号赋值耗时:" + StrResult.ToString() + "毫秒");

            DateTime dateInt1 = System.DateTime.Now;
            for (int i = 0; i < 5000000; i++)
                CountStr2 = String.Empty;
            DateTime dateInt2 = System.DateTime.Now;
            long IntResult = dateInt2.Millisecond - dateInt1.Millisecond;
            Console.WriteLine("用String.Empty赋值耗时:" + IntResult.ToString() + "毫秒");
            Console.ReadLine();
        }

经过我的小黑测试,结果如下:

500万次才只有15毫秒的差距,实在是让人感觉不出来,再说了,哪个正常人没事循环几百万次玩?

数量级不够?体现不出来优势?好,扩大到5亿次。

结果如下:

当然,这只是一个粗略的估计,不过可以看出来,性能上没有网上说的那么夸张。这么点点差距,正常人根本就感觉不出来的,当然,超人除外。。。

网上的传说你也不能全信。。。谁试谁知道。。。


类别:.net学习系列||添加到搜藏 |分享到i贴吧|浏览(425)|评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
     

   
帮助中心 | 空间客服 | 投诉中心 | 空间协议
©2012 Baidu