stringbuilder如何清空(StringBuilder 不清空会有内存泄漏吗)

2025-04-14 23:10:02 0

stringbuilder如何清空(StringBuilder 不清空会有内存泄漏吗)

本文目录

StringBuilder 不清空会有内存泄漏吗

您好,很高兴能帮助您,三种方法。 1、Remove例: StringBuilder val = new StringBuilder(); val.Append(“....“); val.Remove(0,val.Length);//清空2、Replace StringBuilder val = new StringBuilder(); val.Append(“....“); val.Replace(val.ToString(), ““);//清空3、Length StringBuilder val = new StringBuilder(); val.Append(“....“); val.Length = 0;//清空经过测试第三种效率更高,推荐用第三种!你的采纳是我前进的动力,还有不懂的地方,请你继续“追问”!

如何释放stringbuilder占用的内存

之前也看过一些对string与StringBuilder的性能分析,总感觉这个应该对整体性能不会产生多大的影响,所以就一直没有关注这块!由于学程序初期最先接触的string拼接,所以就一直没改变过自己的习惯!前段时间抽时间写了一个CMS系统,一开始的时候每秒钟大概能生成200条新闻,可是后来由于新闻系统与购物系统整合后,发现生成速度突然就掉下来了最快的时候每秒钟也就生成130多条新闻,按照正常的情况下不应该会出现这个问题的,于是从后期整合的代码里面找原因,由于生成新闻的时候,我们都要提取相关商品的相关信息并输出,而且这些都是用string进行拼接的,由于拼接的次数比较频繁,突然就想到了这个string与StringBuilder的性能的问题,于是我粗略的做了一个小小的测试!用StringBuilder循环的拼接10000次字符串需要的时间为0到1毫秒!代码如下:longtt=long.Parse(DateTime.Now.ToString(“yyyyMMddHHmmssfff“));StringBuilderstart=newStringBuilder();for(intj=0;j《10000;j++){start.Append(“测试测试测试测试测试测试测试测试测试测试测试测试“);}longmm=long.Parse(DateTime.Now.ToString(“yyyyMMddHHmmssfff“));Response.Write(Convert.ToString(mm-tt));用string循环的拼接100000次字符串需要的时间为5500到6000毫秒!代码如下:longtt=long.Parse(DateTime.Now.ToString(“yyyyMMddHHmmssfff“));stringstart=string.Empty;for(intj=0;j《10000;j++){start+=“测试“;}longmm=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条新闻了!属蛇的人2012年运程属猪的人2012年运程2013年运程2012年运程属虎的人2012年运程声明:我们的CMS是在配置为windows2003vps服务器,内存为1G,数据库为Sqlserver2000,新闻数据量为:20万的的情况下进行测试的,这样基本已经可以满足我们的要求了!写程序注意细节,尤其是在搭建比较大型的项目时,细节可能就决定了成败!

在.net中,StringBuilder所占的内存如何释放

net中StringBuilder实例所占有的内存,系统(clr)会“定时”自动回收,如果想实时实现内容的释放,可以手动调用GC实现。stringbuilder = null ; GC.Collect();如果你是通过任务管理器查看的,那么需要重启任务管理器,或者最小化然后再打开。

如何用stringbuilder实现动态修改

初始化一个StringBuilder 之后,它会自动申请一个默认的StringBuilder 容量(默认值是16),这个容量是由Capacity来控制的.并且允许,我们根据需要来控制Capacity的大小,也可以通过Length来获取或设置StringBuilder 的长度..先来看Length的用法:1System.Text.StringBuilder sb = new System.Text.StringBuilder();2sb.Append( “123456789“ );//添加一个字符串3sb.Length = 3;//设置容量为34Console.WriteLine( sb.ToString() );//这里输出:12356sb.Length = 30;//重新设置容量为307Console.WriteLine( sb.ToString() + “,结尾“);//这里在原来字符串后面补齐空格,至到Length的为308Console.WriteLine( sb.Length );//这里输出的长度为30通过上面的代码,我们可以看出如果StringBuilder 中的字符长度小于Length的值,则StringBuilder 将会用空格硬填充StringBuilder ,以满足符合长度的设置..如果StringBuilder 中的字符长度大于Length的值,则StringBuilder 将会截取从第一位开始的Length个字符..而忽略超出的部分..再来看看最重要的部分Carpacity的用法: 1System.Text.StringBuilder sb = new System.Text.StringBuilder();//初始化一个StringBuilder 2Console.Write( “Capacity:“ + sb.Capacity );//这里的Capacity会自动扩大 3Console.WriteLine( “\t Length:“ + sb.Length ); 4 5sb.Append( ’1’,17 );//添加一个字符串,这里故意添加17个字符,是为了看到Capacity是如何被扩充的 6Console.Write( “Capacity:“ + sb.Capacity );//这里的Capacity会自动扩大 7Console.WriteLine( “\t Length:“ + sb.Length ); 8 9sb.Append( ’2’,32 );//添加一个字符串10Console.Write( “Capacity:“ + sb.Capacity );//这里的Capacity会自动扩大11Console.WriteLine( “\t Length:“ + sb.Length );1213sb.Append( ’3’,64 );//添加一个字符串14Console.Write( “Capacity:“ + sb.Capacity );//这里的Capacity会自动扩大15Console.WriteLine( “\t Length:“ + sb.Length );1617//注意这里:如果你取消Remove这步操作,将会引发ArgumentOutOfRangeException异常,因为当前容量小于1819//Length,这在自己控制StringBuilder的时候务必要注意容量溢出的问题2021sb.Remove(0,sb.Length);//移出全部内容,再测试22sb.Capacity = 1;//重新定义了容量23sb.Append( ’a’,2 );24Console.Write( “Capacity:“ + sb.Capacity );//这里的Capacity会自动扩大25Console.WriteLine( “\t Length:“ + sb.Length );2627sb.Append( ’b’,4 );28Console.Write( “Capacity:“ + sb.Capacity );//这里的Capacity会自动扩大29Console.WriteLine( “\t Length:“ + sb.Length );3031sb.Append( ’c’,6 );32Console.Write( “Capacity:“ + sb.Capacity );//这里的Capacity会自动扩大33Console.WriteLine( “\t Length:“ + sb.Length上面的代码输出的结果:1Capacity:16 Length:0 //输出第一次,默认的Capacity是162Capacity:32 Length:17 //第二次,我们故意添加了17个字符,于是Capacity=Capacity*23Capacity:64 Length:49 //继续超出,则Capacity=Capacity*24Capacity:128 Length:1135Capacity:3 Length:2 //清空内容后,设置Capacity=1,重新添加了字符6Capacity:7 Length:6 //后面的结果都类似7Capacity:14 Length:12从上面的代码和结果可以说明StringBuilder中容量Capacity是如何增加的:创建一个StringBuilder之后,默认的Capacity初始化为16,接着我们添加17个字符,以方便看到Capacity的扩充后的值..大家在修改Capacity的时候,一定要注意21行的注释,一定要确保Capacity 》= Length,否则会引发ArgumentOutOfRangeException异常...看完结果,就可以推断出Capacity的公式:if ( Capacity 《 Length && Capacity 》 0 ){ Capacity *= 2;}OK..看到公式就明白了..StringBuilder是以当前的Capacity*2来扩充的..所以,在使用StringBuilder需要特别注意,尤其是要拼接或追加N多字符的时候,要注意技巧的使用,可以适当的,有预见性的设置Capacity的值,避免造成过大内存的浪费,节约无谓的内存空间..例如,下列代码就可以根据情况自动的扩展,而避免了较大的内存浪费. 1System.Text.StringBuilder sb = new System.Text.StringBuilder(); 2int i = 0; 3long StartTime = DateTime.Now.Ticks; 4while ( i 《 100000 ) { 5sb.Append( i.ToString() ); 6i++; 7} 8long EndTime = DateTime.Now.Ticks; 910Console.WriteLine( “时间:“ + ( EndTime-StartTime ) + “\t Capacity:“+ sb.Capacity + “\t Length:“ 1112+ sb.Length);1314System.Text.StringBuilder sb1 = new System.Text.StringBuilder();15i = 0;16StartTime = DateTime.Now.Ticks;17while ( i 《 100000 ) 18{19if ( sb1.Capacity 《= sb1.Length )//先判断是否》Length20sb1.Capacity += 7;//这里一定要根据情况的增加容量,否则会有性能上的消耗21sb1.Append( i.ToString() );22i++;23}24EndTime = DateTime.Now.Ticks;2526Console.WriteLine( “时间:“ + ( EndTime-StartTime ) + “\t Capacity:“+ sb1.Capacity + “\t 2728Length:“ + sb1.Length);需要特别说明的一点是,自动增加的容量,一定要根据实际预见的情况而改变,否则不但起不到优化的作用,反而会影响到程序的性能..另外,如果有时间的话,可以测试一下下面的代码,用string和StringBuilder拼接字符串的区别..你会吓到的!! 1System.Text.StringBuilder sb = new System.Text.StringBuilder(); 2int i = 0; 3long StartTime = DateTime.Now.Ticks; 4while ( i 《 100000 ) { 5sb.Append( i.ToString() ); 6i++; 7} 8long EndTime = DateTime.Now.Ticks; 910Console.WriteLine( “时间:“ + ( EndTime-StartTime ) );1112string sb1 = null;13i = 0;14StartTime = DateTime.Now.Ticks;15while ( i 《 100000 ) 16{17sb1 += i;18i++;19}20EndTime = DateTime.Now.Ticks;21Console.WriteLine( “时间:“ + ( EndTime-StartTime ));

c#怎么清空stringbuilder

StringBuilder strBuilder=new StringBuilder();

            StringBuilder strBuilder2 = new StringBuilder();

            strBuilder.Append(“string_1“);

            strBuilder.Append(“string_2“);

            strBuilder.Append(“string_3“);

            strBuilder.Append(“string_4“);

            strBuilder = new StringBuilder();

            strBuilder2.Append(“string_5“);

            strBuilder2.Append(“string_6“);

            strBuilder2.Append(“string_7“);

            strBuilder2.Append(“string_8“);

            strBuilder2.Remove(0, strBuilder2.Length);

自己去设个断点,看结果 ─ 2个都是为空了。

Images_1:

    

Images_2:

    

stringbuilder如何清空(StringBuilder 不清空会有内存泄漏吗)

本文编辑:admin

更多文章:


工作流java(谁知道java工作流是什么东西)

工作流java(谁知道java工作流是什么东西)

本文目录谁知道java工作流是什么东西JAVA开发中工作流是什么概念、本人很模糊、求教java中的工作流到底是什么东西谁知道java工作流是什么东西工作流是业务流程的全部或部分自动化,在此过程中,文档、信息或任务按照一定的过程规则流转,实现

2025年2月26日 10:00

flash动画网(有没有在制作flash动画方面比较有经验的)

flash动画网(有没有在制作flash动画方面比较有经验的)

本文目录有没有在制作flash动画方面比较有经验的如何判断MG动画与flash动画有没有在制作flash动画方面比较有经验的中国宣传片制作网,国内优质宣传片制作公司权威展示平台,现在很多动画片制作公司都已经入驻了的,你可以上去看看有没有自己

2025年3月6日 16:10

win10ssh(win10自带的服务openssh如何设置开机自动启动)

win10ssh(win10自带的服务openssh如何设置开机自动启动)

本文目录win10自带的服务openssh如何设置开机自动启动win10家庭版能使用ssh吗,用win自带ssh连不上ubuntu,ping也ping不通win10自带的服务openssh如何设置开机自动启动你可以尝试在cmd下多输入一条命

2025年2月24日 04:30

sweetener(sweetener和suger的区别)

sweetener(sweetener和suger的区别)

本文目录sweetener和suger的区别sugar-free sweetenersweetener和suger的区别sweetener 名词 增甜剂 甜头的意思 楼主sugar写错了哦 是sugar 不是suger sugar是糖的意思

2025年4月15日 09:50

模式匹配符中的%,_什么作用?为什么诸多编程语言都将模式匹配作为重要构成

模式匹配符中的%,_什么作用?为什么诸多编程语言都将模式匹配作为重要构成

本文目录模式匹配符中的%,_什么作用为什么诸多编程语言都将模式匹配作为重要构成在Word编辑中,模式匹配查找中能使用的通配符是模式匹配的概念什么是半导体泵浦固体激光器中的光谱匹配和模式匹配字符串的模式匹配算法串的模式匹配是什么英雄联盟几级才

2025年3月29日 12:20

cvs便利店(便利超市有哪些)

cvs便利店(便利超市有哪些)

本文目录便利超市有哪些便利店的含义是什么便利超市有哪些1、全家、罗森(华联罗森)等。服务质量一般较高,营业员较为年轻。管理水平较高,经营的商品有不少为跨国品牌。2、好德(农工商)、良友、可的(光明公司),快客(联华)、好邻居、喜士多(润泰集

2025年4月15日 05:00

inline函数用法(matlab inline 函数的用法)

inline函数用法(matlab inline 函数的用法)

本文目录matlab inline 函数的用法inline函数怎么使用用数组做参数matlab inline 函数的用法inline是用来定义内联函数的比如说:y=inline(’sin(x)’,’x’)%第一个参数是表达式,第二个参数是函

2025年3月17日 14:40

oracle下载安装包(如何在官方网站下载ORACLE的安装包)

oracle下载安装包(如何在官方网站下载ORACLE的安装包)

本文目录如何在官方网站下载ORACLE的安装包oracle安装包,官网如何下载,看不懂英文.请解释下主要意思.win10怎么安装oracle10如何在官方网站下载ORACLE的安装包oraclehttp://www.oracle.com/t

2025年4月5日 04:50

opengl官网下载(请问opengl 1.3哪有下载)

opengl官网下载(请问opengl 1.3哪有下载)

本文目录请问opengl 1.3哪有下载求openGL下载地址哪里有opengl的下载OpenGL在那里下载OPENGL哪里下载/请问opengl 1.3哪有下载1.3估计你是很难找到了 官网opengl.org已经出到4.0了,它里面包括

2025年3月18日 16:40

covered怎么读(cover怎么读)

covered怎么读(cover怎么读)

本文目录cover怎么读cover什么意思cover的八种意思cover怎么读cover 英 过去式:covered 过去分词:covered 现在分词:covering 复数:covers vt. 1.覆盖, 遮盖 2.掩盖 3.

2025年3月31日 07:40

struggle to do sth(struggle的用法是否有struggle to 的用法)

struggle to do sth(struggle的用法是否有struggle to 的用法)

本文目录struggle的用法是否有struggle to 的用法make an attempt to do和struggle to do有没有努力的意思struggle(v.)和strive的区别struggle to do什么意思str

2025年2月26日 06:10

ios人脸识别(iosQQ系统如何重置人脸识别)

ios人脸识别(iosQQ系统如何重置人脸识别)

本文目录iosQQ系统如何重置人脸识别苹果ios10系统照片人脸识别功如何使用苹果人脸识别突然用不了苹果下载软件人脸识别了怎么还要输入动态密码和密码苹果如何设置两个人脸识别iPhonex人脸识别失败怎么办,有啥办法解决苹果手机人脸识别突然不

2025年3月16日 01:50

电脑安装双系统的利弊(电脑装双系统有什么坏处)

电脑安装双系统的利弊(电脑装双系统有什么坏处)

本文目录电脑装双系统有什么坏处电脑双系统有什么好处和坏处电脑装2个系统有哪些好处和坏处越详细越好电脑装双系统有什么好处和坏处电脑双系统有什么坏处有没有必要装双系统有什么好处和坏处苹果电脑装双系统利弊电脑装双系统有什么弊端吗电脑装双系统有什么

2025年2月19日 22:20

talented的中文(英语I am courageous and I am talented怎么翻译)

talented的中文(英语I am courageous and I am talented怎么翻译)

本文目录英语I am courageous and I am talented怎么翻译talent的用法及短语是什么英语I am courageous and I am talented怎么翻译I am courageous and I a

2025年4月9日 05:50

java工厂设计模式(java什么是工厂设计模式)

java工厂设计模式(java什么是工厂设计模式)

本文目录java什么是工厂设计模式怎样使用Java实现Factory设计模式java什么是工厂设计模式把创建对象的工作,交给一个抽象出来的概念’工厂’去做,就是工厂设计模式。比如,你要新建一个用户对象 User user=new User(

2025年3月28日 04:30

loadimage(一开机就出现loadimage failed)

loadimage(一开机就出现loadimage failed)

本文目录一开机就出现loadimage failedloadimage:none of the 2 overloads can convert一开机就出现loadimage failed解决方案在另一台电脑上制作启动U盘(需格式化U盘,注意

2025年4月15日 13:40

php mysql 连接池(php做的网站 连接mysql数据库 效率问题)

php mysql 连接池(php做的网站 连接mysql数据库 效率问题)

本文目录php做的网站 连接mysql数据库 效率问题Nginx跟php和mysql数据库怎么连接的php-fpm怎么连接的mysqlnginx+ mysql +php 能连接数据库,但是不能读取数据库数据PHP服务器端守护进程怎么实现My

2025年2月20日 13:20

the service is unavailable(the service is unavailable.是什么意思)

the service is unavailable(the service is unavailable.是什么意思)

本文目录the service is unavailable.是什么意思http error 503.the service is unavailable是什么意思http error 503.the service is unavaila

2025年3月4日 00:30

mod函数是什么意思(在EXCEL中“MOD函数”的用法是什么)

mod函数是什么意思(在EXCEL中“MOD函数”的用法是什么)

本文目录在EXCEL中“MOD函数”的用法是什么算法里的MOD是什么意思怎么运算在VB中,MOD是什么函数在matlab中mod是什么意思Excel mod函数MOD函数解释 =MOD(E29:J29,6)代表什么意思在EXCEL中,MOD

2025年2月26日 12:30

面向对象模型的特点(什么是面向对象过程模型,有什么优点和缺点)

面向对象模型的特点(什么是面向对象过程模型,有什么优点和缺点)

本文目录什么是面向对象过程模型,有什么优点和缺点数据库面向对象模型的优缺点是什么面向对象 基本特征面向对象的三大特征是什么面向对象的主要特征有哪些方面什么是面向对象过程模型,有什么优点和缺点优点: (1)是一种全新的系统分析设计方法

2025年3月31日 11:50

近期文章

split js(js中split())
2025-04-20 03:00:08
csstext(css 中text)
2025-04-20 02:50:02
什么是PHP?php 是什么
2025-04-20 02:40:02
本站热文

harbor,port,pier的区别?谁能解释“harbour“(港口)与“pier“(码头)的区别
2025-02-22 17:40:03 浏览:20
ibatis foreach(ibatis 批量update操作)
2025-02-10 23:40:06 浏览:7
endless rain(endless rain表达什么情感)
2025-02-14 06:00:02 浏览:7
winrar下载官网(WinRAR哪儿下载\)
2025-04-19 09:30:01 浏览:5
标签列表

热门搜索