灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:3177回复:0

string与StringBuilder性能差距到底有多大

楼主#
更多 发布于:2012-09-08 09:43

之前也看过一些对string与StringBuilder的性能分析,总感觉这个应该对整体性能不会产生多大的影响,所以就一直没有关注这块!
        由于学程序初期最先接触的string拼接,所以就一直没改变过自己的习惯!
        前段时间抽时间写了一个CMS系统,一开始的时候每秒钟大概能生成200条新闻,可是后来由于新闻系统与购物系统整合后,发现生成速度突然就掉下来了,最快的时候每秒钟也就生成130多条新闻,按照正常的情况下不应该会出现这个问题的,于是从后期整合的代码里面找原因,由于生成新闻的时候,我们都要提取相关商品的相关信息并输出,而且这些都是用string进行拼接的,由于拼接的次数比较频繁,
突然就想到了这个string与StringBuilder的性能的问题,于是我粗略的做了一个小小的测试!
        用StringBuilder循环的拼接10000次字符串需要的时间为 0到1毫秒!
代码如下:

java代码
<SPAN style="FONT-SIZE: 14px; LINE-HEIGHT: 21px; TEXT-ALIGN: left">    </SPAN><SPAN style="FONT-SIZE: 14px; LINE-HEIGHT: 21px; TEXT-ALIGN: left">long tt = long.Parse(DateTime.Now.ToString("yyyyMMddHHmmssfff"));</SPAN>            
    StringBuilder start = new StringBuilder();  

        for(int j=0;j<10000;j++)  
        {  
            start.Append("测试测试测试测试测试测试测试测试测试测试测试测试");  
        }  
        long mm = long.Parse(DateTime.Now.ToString("yyyyMMddHHmmssfff"));  
        Response.Write(Convert.ToString( mm-tt));
    long tt = long.Parse(DateTime.Now.ToString("yyyyMMddHHmmssfff"));        
    StringBuilder start = new StringBuilder();
        for(int j=0;j<10000;j++)
        {
            start.Append("测试测试测试测试测试测试测试测试测试测试测试测试");
        }
        long mm = long.Parse(DateTime.Now.ToString("yyyyMMddHHmmssfff"));
        Response.Write(Convert.ToString( mm-tt));
用string循环的拼接100000次字符串需要的时间为 5500到6000毫秒!
代码如下:


java代码
long tt = long.Parse(DateTime.Now.ToString("yyyyMMddHHmmssfff"));  
        string start =string.Empty;  
          
        for(int j=0;j<10000;j++)  
        {  
            start += "测试测试测试测试测试测试测试测试测试测试测试测试";  
        }  
        long mm = long.Parse(DateTime.Now.ToString("yyyyMMddHHmmssfff"));  
        Response.Write(Convert.ToString( mm-tt));
long tt = long.Parse(DateTime.Now.ToString("yyyyMMddHHmmssfff"));
        string start =string.Empty;
      
        for(int j=0;j<10000;j++)
        {
            start += "测试测试测试测试测试测试测试测试测试测试测试测试";
        }
        long mm = long.Parse(DateTime.Now.ToString("yyyyMMddHHmmssfff"));
        Response.Write(Convert.ToString( mm-tt));
         我原本用的是100000 次拼接做的测试,StringBuilder仅用了30毫秒,但是用string拼接就执行几分钟没有执行完,所以我就改用10000次来做试验了!
        简单的可以概括为,string拼接的次数越多,速度则越慢,而StringBuilder则几乎不怎么变化!
string与StringBuilder的性能问题看上去可能很多人觉得没什么,但是一旦操作的次数多了,那么速度就很明显的显示出来了!
       我把所有的关于string的操作都改成了 StringBuilder来操作,再看CMS的生成速度可以达到每秒钟生成300条新闻了!


声明:我们的CMS是在配置为  windows2003 vps 服务器, 内存为 1G,数据库为Sqlserver2000,新闻数据量为:20万的的情况下进行测试的,
这样基本已经可以满足我们的要求了!
写程序注意细节,尤其是在搭建比较大型的项目时,细节可能就决定了成败!


喜欢0 评分0
游客

返回顶部