• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > 浅析C#中StringBuilder类的高效及与String的对比

浅析C#中StringBuilder类的高效及与String的对比

作者:吉吉于 字体:[增加 减小] 来源:互联网 时间:2017-05-28

吉吉于 通过本文主要向大家介绍了浅析b/s和c/s体系结构,浅析办公室管理论文,浅析茶道 毕业论文,金融资产浅析,浅析等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

在C#中,在处理字符串拼接的时候,使用StringBuilder的效率会比硬拼接字符串高很多。到底有多高,如下:

static void Main( string[] args )
{
 string str1 = string.Empty;
 Stopwatch sw1 = new Stopwatch();
 sw1.Start();
 for ( int i = 0; i < 10000; i++ )
 {
 str1 = str1 + i.ToString();
 }
 sw1.Stop();
 Console.WriteLine( "拼接字符串所耗费时间为:" + sw1.ElapsedMilliseconds + "毫秒" );
 StringBuilder str2 = new StringBuilder( 10000 );
 Stopwatch sw2 = new Stopwatch();
 sw2.Start();
 for ( int i = 0; i < 10000; i++ )
 {
 str2.Append( i.ToString() );
 }
 sw2.Stop();
 Console.WriteLine( "使用StringBuilder所耗费时间为:" + sw2.ElapsedMilliseconds + "毫秒" );
 Console.ReadKey();
}

</div>

上面代码执行的效果如下:

2016518151713376.png (323×59)

string类型的特别之处在于我们可以像使用值类型那样使用string类型,而实际上string是引用类型。既然是引用类型,CLR就会把string类型保存在托管堆上。当我们使用str1 = str1 + i.ToString();进行拼接,由于string类型的恒定性,不会改变str1在内存中的地址,而是在托管堆上创建了另外一个字符串对象。如此,拼接10000次,就创建了10000个string类型对象,效率难免低下。

而StringBuilder会在内存中开辟一块连续的内存,当增加字符串实际上是针对同一块内存的修改,所以效率更高。

当然,到底使用硬拼接字符串,还是使用StringBuilder,不是绝对的,要看情况。当拼接字符串很少的情况下,当然直接硬拼接字符串就行了。

深入string和stringBuilder的区别
String对象是不可改变的。每次使用System.String类中的方法之一或者是进行运算时(如赋值、拼接等),都要在内存中创建一个新的字符串对象,这就需要为该新对象分配内存空间,而StringBuilder则不会。在需要对字符串执行重复修改操作时,与创建新的 String 对象相关的系统开销可能会非常昂贵。如果要修改字符串而不创建新的对象,则可以使用 System.Text.StringBuilder 类。例如,当在一个循环中将许多字符串连接在一起时,使用 StringBuilder 类可以提升性能。

String类型对象的特点:
1.它是引用类型,在堆上分配内存
2.运算时会产生一个新的实例
3.String 对象一旦生成不可改变(Immutable)
4.定义相等运算符(== 和 !=)是为了比较 String 对象的值(而不是引用)

大家都知道字符串对象是”不可变的”,
对字符串进行操作的方法实际上返回的是新的字符串对象。
在前面的示例中,将 s1 和 s2 的内容连接起来以构成一个字符串时,包含 "orange" 和 "red" 的两个字符串均保持不变。+= 运算符会创建一个包含组合内容的新字符串。结果是 s1 现在引用一个完全不同的字符串。只包含"orange" 的字符串仍然存在,但连接 s1 后将不再被引用。
大量的字符串相加的时候就会有很多想s1一样的 不在被引用,从而造成资源的极大浪费.
大家注意这点

string stringValue = this.m_StringValue;

internal volatile string m_StringValue;

</div>

写到这里,需要有人见看到了 volatile,也许不明白是什么意思,大概的说下.
volatile关键字实现了线程间数据同步,用volatile修饰后的变量不允许有不同于”主”内存区域的变量拷贝。
换句话说,一个变量经volatile修饰后在所有线程中必须是同步的;任何线程中改变了它的值,所有其他线程立即
获取到了相同的值。理所当然的,volatile修饰的变量存取时比一般变量消耗的资源要多一点,因为线程有它自己的
变量拷贝更为高效。

this.NeedsAllocation(stringValue, requiredLength)
</div>

只有在需要的时候才去重新分配.
就分配空间和线程的使用上来讲,StringBuilder肯定比String要高,但是前提是使用频率比较高的情况下.

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 浅析C# 使用Process调用外部程序中所遇到的参数问题
  • 深入浅析C#泛型类型
  • 浅析C# 中的类型系统(值类型和引用类型)
  • 浅析C#中结构与类的区别
  • 浅析C#中文件路径的操作
  • 浅析C#静态类,静态构造函数,静态变量
  • 浅析C#中StringBuilder类的高效及与String的对比

相关文章

  • 2017-05-28C#基于cookie实现的购物车功能
  • 2017-05-28ASP.NET MVC命名空间时引起错误的解决方法
  • 2017-05-28C#(4.0)不常见的语法
  • 2017-05-28超炫酷的WPF实现Loading控件效果
  • 2017-05-28C# 汉字转拼音实例(支持GB2312字符集中所有汉字)
  • 2017-05-28C#实现将json转换为DataTable的方法
  • 2017-05-28C#对DataTable里数据排序的方法
  • 2017-05-28c# HttpWebRequest通过代理服务器抓取网页内容应用介绍
  • 2017-05-28详解C#多线程之线程同步
  • 2017-05-28C# WinForm实现Win7 Aero透明效果代码

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C#防SQL注入代码的三种方法
    • C# 调用API函数弹出映射网络驱动器对话框问题
    • C#语法相比其它语言比较独特的地方(一)
    • C#实现在控制台输入密码显示星号的方法
    • C#开发纽曼USB来电小秘书客户端总结
    • winform中的ListBox和ComboBox绑定数据用法实例
    • C# BackgroundWorker组件学习入门介绍
    • C#自定义基于控制台的Timer实例
    • C#生成sitemap站点地图的方法
    • WPF/Silverlight实现图片局部放大的方法分析

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有