原文位於 http://www.dotblogs.com.tw/mis2000lab/archive/2013/09/09/msdn_string_stringbuilder.aspx

[FAQ]String(字串相連)與StringBuilder的差別、原理與優缺點?

这是一个FAQ啰。

今天看见msdn网站上一个范例,讲得很清楚

除了给自己做一个记录,将来上课能用到

也分享给大家。

资料来源:http://msdn.microsoft.com/zh-tw/library/system.string.aspx

=========================================================================================

不变性和StringBuilder 类别

String 对象称为不可变动的 (只读),因为建立它之后便"无法" 修改它的值

看起来好像会修改 String 对象的方法,其实是传回 已修改之后的 "" String 对象。

由于字符串是不变的 (immutable),执行字符串处理例程重复加入或删除单一字符串  可能会大幅影响效能。

例如,下列程序代码使用随机数产生器,在 0x0001 到 0x052F 的范围中建立含 1000 个字符的字符串。

尽管程序代码似乎是使用 字符串串连(C#使用+ 符号。VB使用& 符号)将新的字符附加至名为 str 的现有字符串,

但它实际上会为每个串连作业建立"新的" String 对象

using System;

using System.IO;

using System.Text;

public class Example

{

public static void Main()

{

Random rnd = new Random();

string str = String.Empty;

StreamWriter sw = new StreamWriter(@".\StringFile.txt", false, Encoding.Unicode);

for (int ctr = 0; ctr <= 1000; ctr++) {

str += Convert.ToChar(rnd.Next(1, 0x0530));

if (str.Length % 60 == 0)

str += Environment.NewLine;

}

sw.Write(str);

sw.Close();

}

}

Imports System.IO

Imports System.Text

Module Example

Public Sub Main()

Dim rnd As New Random()

Dim str As String = String.Empty

Dim sw As New StreamWriter(".\StringFile.txt", False, Encoding.Unicode)

For ctr As Integer = 0 To 1000

str &= ChrW(rnd.Next(1, &h0530))

If str.Length Mod 60 = 0 Then str &= vbCrLf

Next

sw.Write(str)

sw.Close()

End Sub

End Module

=========================================================================================

对字符串值进行"多重变更的作业中,您可以使用 StringBuilder 类别取代 String 类别。

与 String 类别执行个体不同的是,StringBuilder 对象是可变的

当您串连、附加或删除字符串中的子字符串时,作业是在单一字符串上执行。

当您完成修改 StringBuilder 对象的值时,可以呼叫其 StringBuilder.ToString()方法,将它转换为字符串。

下列范例会取代所使用的 String 串连介于 1000 的任意字符到 0x0001 到与 StringBuilder 对象的 0x052F。

using System;

using System.IO;

using System.Text;    // for StringBuilder

public class Example

{

public static void Main()

{

Random rnd = new Random();

StringBuilder sb = new StringBuilder();

StreamWriter sw = new StreamWriter(@".\StringFile.txt", false, Encoding.Unicode);

for (int ctr = 0; ctr <= 1000; ctr++) {

sb.Append(Convert.ToChar(rnd.Next(1, 0x0530)));

if (sb.Length % 60 == 0)

sb.AppendLine();

}

sw.Write(sb.ToString());

sw.Close();

}

}

Imports System.IO

Imports System.Text    '--for StringBuilder

Module Example

Public Sub Main()

Dim rnd As New Random()

Dim sb As New StringBuilder()

Dim sw As New StreamWriter(".\StringFile.txt", False, Encoding.Unicode)

For ctr As Integer = 0 To 1000

sb.Append(ChrW(rnd.Next(1, &h0530)))

If sb.Length Mod 60 = 0 Then sb.AppendLine()

Next

sw.Write(sb.ToString())

sw.Close()

End Sub

End Module

以前测试过,字符串相连、StringBuilder的执行速度,请看这篇文章 --

    http://www.dotblogs.com.tw/mis2000lab/archive/2009/11/25/vs2010_vs2008_who_fast.aspx

1.  文字数量大

2.  从数据表的字段取出,且字符串长度忽长忽短时......StringBuilder有绝对的优势。

[FAQ]String(字串相連)與StringBuilder的差別、原理與優缺點?的更多相关文章

  1. Day07 - Ruby比一比:Symbol符号与String字串

    前情提要: 第六天我们透过Ruby代码练习public,protected和privatemethod时,发现冒号在前面的参数,:mydraft,:myspace,这些就是符号Symbol.在今天,我 ...

  2. Oracle的字串處理

    Oracle的字串處理 除了寫程式之外,資料庫的應用也是蠻重要的,而SQL語法,用法大致相同,但各公司所出的資料庫還是有所差別,而ORACLE SQL給了相當多的函數應用,下面列了一些函法的名稱和用法 ...

  3. 如何使用 Python 進行字串格式化

    前言: Python有几种方法可以显示程序的输出:数据可以以人类可读的形式打印出来,或者写入文件以供将来使用. 在开发应用程式时我们往往会需要把变数进行字串格式化,也就是说把字串中的变数替换成变量值. ...

  4. DELPHI加密字串(异或运算加密)

    首先有两个自定的转换函数: function myStrToHex(s:string):string; //字串转16进制 var TmpStr:string; i:integer; begin Tm ...

  5. Get與Post的區別--總結隨筆

    關於Get與Post的區別的文章,在網上太多了:有優點有缺點,今天我給各位大哥做一個總結性的隨筆,還請多多包涵~ 首先是W3School上的答案,請查收: GET在浏览器回退时是无害的,而POST会再 ...

  6. [leetcode] 30. 与所有单词相关联的字串(cn第653位做出此题的人~)

    30. 与所有单词相关联的字串 这个题做了大概两个小时左右把...严重怀疑leetcode的judge机器有问题.同样的代码交出来不同的运行时长,能不能A题还得看运气? 大致思路是,给words生成一 ...

  7. Leetcode——30.与所有单词相关联的字串【##】

    @author: ZZQ @software: PyCharm @file: leetcode30_findSubstring.py @time: 2018/11/20 19:14 题目要求: 给定一 ...

  8. C语言:自定义一个查找字串的功能函数,类似于<string.h>中的strstr()

    //自定义一个字符串字串查找标准库函数strstr() #include<stdio.h> #include<string.h> char* myStrstr(char *st ...

  9. #Windows Phone:在HTML5专案中,如何从Javascript传送字串到C#的APP端

    原文:#Windows Phone:在HTML5专案中,如何从Javascript传送字串到C#的APP端 #Windows Phone:在HTML5专案中,如何从Javascript传送字串到C#的 ...

随机推荐

  1. Bootstrap栅格系统

    栅格系统分为两种:默认栅格系统 row,流式栅格系统 row-fluid. row 默认栅格系统:即指定了每个栅格的宽度为60px,间距为20px.共有12个栅格.总宽度为940px; 即12个栅格= ...

  2. 《Code Complete》ch.20 软件质量概述

    WHAT & WHY ? 软件质量的特性 外在特性 正确性(Correctness) 可用性(Usability) 效率(Efficiency) 可靠性(Reliability) 完整性(In ...

  3. FileSystem实例化过程

    HDFS案例代码 Configuration configuration = new Configuration(); FileSystem fileSystem = FileSystem.get(n ...

  4. 64位CentOS 6.4下安装wine

    From: http://zhidao.baidu.com/question/530358126.html From: http://hi.baidu.com/billdkj/item/464fb84 ...

  5. Windows 2008 IIS7.0安装FTP教程 IIS7.5 配置多用户FTP

    一. 安装IIS.右键[我的电脑],选择[管理]打开.     选择[角色],选择[添加角色]打开.                   二. 配置DOS.输入: CACLS "%Syste ...

  6. python学习(二):python基本语法

    前言:python基本的语法与其他语言诸如C,JAVA等类似,但个中有些许不同. 一.常规语法 1.变量名与关键字 与其他语言类似,变量名由字母.数字.下划线组成,且必须由字母开头. 变量使用不需要提 ...

  7. url 参数的加号变成空格处理

    今天在调试客户端向服务器传递参数时,参数中的“+”全部变成了空格,原因是URL中默认的将“+”号转义了. 解决方法如下: 方法一.修改客户端 将客户端带“+”的参数中的“+”全部替换为‍“2B%”,这 ...

  8. APP发布Xcode7

    一.准备工作 1>准备3.5寸.4寸.4.7寸.5.5寸的程序截图至少个1张,如果支持iPad,那么iPad截图也要有.这些截图尽量截取页面漂亮的,因为这些截图是要放在AppStore中展示的. ...

  9. MVC 百度地图的基本使用

    最近做的这个项目里面为了方便路线查询,将百度地图的插件加到了项目里,效果图如下: 下面我就把我的步骤贴出来: 第一步:进网站 http://developer.baidu.com/map/注册 第二步 ...

  10. 实用防火墙(Iptables)脚本分析

    实用防火墙(Iptables)脚本分析 --Redhat,CentOS,Ubuntu等常见Linux发行版中都会预装Iptables防火墙,大多数初学者设置起来由于对这款软件比较陌生,设置起来比较困难 ...