注册本站  论坛  繁體中文

电脑技巧
手机 | MP3 | MP4 | 显卡 | 主板 | 显示器 | 光存储 | 笔记本 | 网络设备 | 移动存储 | 数码相机
键鼠 | CPU | 音箱 | GPS | 电视 | 服务器 | 投影机 | 机箱电源 | 品牌电脑 | 办公打印 |
| 网站首页 | Cisco | Windows | Linux | Java | Dotnet | Oracle | 网页设计 | 平面设计 | 安全 | 软件应用 | 电脑维修 | 办公维修 |
您现在的位置: 电脑技巧 >> Dotnet >> C# >> Dotnet正文

C# String StringBuider 解惑

文章来源:blog.csdn.net 作者:爱家 更新时间:2008-6-28 20:38:57 【 】 【加入收藏

一个常问的问题:

    http://blog.csdn.net/problc/archive/2008/06/03/2509046.aspx

    A=B+C+D;

    A,B,C,D都是string对象。

    这是讨论string和stringbuilder的一个常用例子,也喜欢以此来说明stringbuilder比string好。

    我们说这种方式创建了A,B,C,D,B+C,B+C+D这样6个对象。而

    用stringbuilder创建一个对象,append就行。

    但实际上,

    stringbuilder sb =new stringbuilder();

    sb.Append(A);

    sb.Append(B);

    sb.Append(C);

    sb.Append(D);

    sb.ToString();

    这样也创建了5个对象。当然少创建一个对象也是收获。

    StringBuilder比String好的地方在于,她初始化的时候分配了一个相对大的空间,如果新加一个对象空间不够的话,会再分配一个是原来2倍大小的一个空间,然后把原来空间的数据复制到新的空间,这个过程是有损性能的。

    所以StringBuilder适合append一些差不多大小的对象,这样不会引起频繁的内存复制操作。

    还是回到开始:

    A=B+C+D;

    这种写法真的创建了6个对象吗???????

    不一定!!!!

    在编译器里面这句可能被优化成A = String.Concat(new object[]{B,C,D});

    所以这个例子并不适合于说string和StringBuilder的区别。

    那StringBuilder到底什么时候用呢。

    A=B;

    A +=C;

    A += D;

    当有大量的+=的时候,我们才应该考虑StringBuilder。

    所以我们的StringBuider建议里说循环里面不要用String,因为通常循环里面我们做的事情就是+=。

    如果只是一次操作,几个对象+的话,实际上编译器会优化A=B+C+D这种表达式,不需要去用StringBuilder。

    一个常问的问题:

    http://blog.csdn.net/problc/archive/2008/06/03/2509046.aspx

    A=B+C+D;

    A,B,C,D都是string对象。

    这是讨论string和stringbuilder的一个常用例子,也喜欢以此来说明stringbuilder比string好。

    我们说这种方式创建了A,B,C,D,B+C,B+C+D这样6个对象。而

    用stringbuilder创建一个对象,append就行。

    但实际上,

    stringbuilder sb =new stringbuilder();

    sb.Append(A);

    sb.Append(B);

    sb.Append(C);

    sb.Append(D);

    sb.ToString();

    这样也创建了5个对象。当然少创建一个对象也是收获。

    StringBuilder比String好的地方在于,她初始化的时候分配了一个相对大的空间,如果新加一个对象空间不够的话,会再分配一个是原来2倍大小的一个空间,然后把原来空间的数据复制到新的空间,这个过程是有损性能的。

    所以StringBuilder适合append一些差不多大小的对象,这样不会引起频繁的内存复制操作。

    还是回到开始:

    A=B+C+D;

    这种写法真的创建了6个对象吗???????

    不一定!!!!

    在编译器里面这句可能被优化成A = String.Concat(new object[]{B,C,D});

    所以这个例子并不适合于说string和StringBuilder的区别。

    那StringBuilder到底什么时候用呢。

    A=B;

    A +=C;

    A += D;

    当有大量的+=的时候,我们才应该考虑StringBuilder。

    所以我们的StringBuider建议里说循环里面不要用String,因为通常循环里面我们做的事情就是+=。

    如果只是一次操作,几个对象+的话,实际上编译器会优化A=B+C+D这种表达式,不需要去用StringBuilder。

  • 上一篇Dotnet:

  • 下一篇Dotnet:
  • 最 新 热 门
     web.config配置文件中的 元素
     为网站添加业务层
     用SqlDataSource实现DataList嵌套DataList
     Visual Studio 2003插件的编写
     千条DOS命令收藏
     IIS 常见问题
     IIS需要的最小NTFS权限
     优化 .NET的性能
     设计模式与VB .net代码 外观模式,合成模式
     VB.net中介者模式
    最 新 推 荐
     Windows via C/C++ —进程(一)
     C#邮件发送程序
     扩展 ASP.NET 的客户端验证
     实现DataGridView中行的上下移动
     C#中的委托和事件
     与IDE相关的Attribute属性
     C#中using关键字的使用介绍
     C#FileStream复制大文件
     C#实用技巧:轻松实现对文件的操作
     C#实现所有经典排序算法
    相 关 文 章

    用SqlDataSource实现DataList嵌套DataList
    Visual Studio 2003插件的编写
    vb.net中用GetPrivateProfileString访问INI…
    C#通过ADO.NET建表点实现方法
    asp.net+C#实现文件上传实现代码
    C#邮件发送程序
    C#中的委托和事件
    C#中using关键字的使用介绍
    C#FileStream复制大文件
    C#实用技巧:轻松实现对文件的操作

    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告

     

    Copyright 2006-2008 pcjx.com All Rights Reserved
    电脑技巧 版权所有 粤ICP备06059145号 地图
    本网站所有内容未经许可不得转载或做其他使用