[FAQ]String(字串相連)與StringBuilder的差別、原理與優缺點?
原文位於 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的差別、原理與優缺點?的更多相关文章
- Day07 - Ruby比一比:Symbol符号与String字串
前情提要: 第六天我们透过Ruby代码练习public,protected和privatemethod时,发现冒号在前面的参数,:mydraft,:myspace,这些就是符号Symbol.在今天,我 ...
- Oracle的字串處理
Oracle的字串處理 除了寫程式之外,資料庫的應用也是蠻重要的,而SQL語法,用法大致相同,但各公司所出的資料庫還是有所差別,而ORACLE SQL給了相當多的函數應用,下面列了一些函法的名稱和用法 ...
- 如何使用 Python 進行字串格式化
前言: Python有几种方法可以显示程序的输出:数据可以以人类可读的形式打印出来,或者写入文件以供将来使用. 在开发应用程式时我们往往会需要把变数进行字串格式化,也就是说把字串中的变数替换成变量值. ...
- DELPHI加密字串(异或运算加密)
首先有两个自定的转换函数: function myStrToHex(s:string):string; //字串转16进制 var TmpStr:string; i:integer; begin Tm ...
- Get與Post的區別--總結隨筆
關於Get與Post的區別的文章,在網上太多了:有優點有缺點,今天我給各位大哥做一個總結性的隨筆,還請多多包涵~ 首先是W3School上的答案,請查收: GET在浏览器回退时是无害的,而POST会再 ...
- [leetcode] 30. 与所有单词相关联的字串(cn第653位做出此题的人~)
30. 与所有单词相关联的字串 这个题做了大概两个小时左右把...严重怀疑leetcode的judge机器有问题.同样的代码交出来不同的运行时长,能不能A题还得看运气? 大致思路是,给words生成一 ...
- Leetcode——30.与所有单词相关联的字串【##】
@author: ZZQ @software: PyCharm @file: leetcode30_findSubstring.py @time: 2018/11/20 19:14 题目要求: 给定一 ...
- C语言:自定义一个查找字串的功能函数,类似于<string.h>中的strstr()
//自定义一个字符串字串查找标准库函数strstr() #include<stdio.h> #include<string.h> char* myStrstr(char *st ...
- #Windows Phone:在HTML5专案中,如何从Javascript传送字串到C#的APP端
原文:#Windows Phone:在HTML5专案中,如何从Javascript传送字串到C#的APP端 #Windows Phone:在HTML5专案中,如何从Javascript传送字串到C#的 ...
随机推荐
- (转)由Uploadify插件想到的Flash无法传递Session和Cookie的问题解决
在ASP.NET MVC3中使用Uploadify上传文件时发现,在后台需要验证登录状态的时候,Uploadify根本无法完成验证,因此,在后台只能使用非验证状态进行文件上传 —— 众所周知,这无异于 ...
- android 图片叠加效果——两种方法
效果图: 第一种: 第二种: 第一种是通过canvas画出来的效果: public void first(View v) { // 防止出现Immutable bitmap passed to Can ...
- css+js+html基础知识总结
css+js+html基础知识总结 一.CSS相关 1.css的盒子模型:IE盒子模型.标准W3C盒子模型: 2.CSS优先级机制: 选择器的优先权:!important>style(内联样式) ...
- Leveldb 实现原理
原文地址:http://www.cnblogs.com/haippy/archive/2011/12/04/2276064.html LevelDb日知录之一:LevelDb 101 说起LevelD ...
- 慕课网-安卓工程师初养成-1-1 Java简介
来源 http://www.imooc.com/video/1430 主要内容 Java平台应用 核心概念:JVM,JDK,JRE 搭建Java开发环境 使用工具开发安卓程序 经验技巧分享 Java历 ...
- xml中俩种解析方式
两种解析方式 1.from xml.etree import ElementTree as ET 利用ElementTree模块下的xml方法可以把一个字符串类型的东西转换成Element类,从而利用 ...
- Facebook三种分享方式
一.去Facebook开发者中心注册APP,获取APP ID https://developers.facebook.com 二.导入 FBSDKCoreKit.Framework, FBSDKLog ...
- vsftp.conf
anonymous_enable=NO local_enable=YES write_enable=YES dirmessage_enable=YES xferlog_enable=YES xferl ...
- 洛谷P2735 电网 Electric Fences
P2735 电网 Electric Fences 11通过 28提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交 讨论 题解 最新讨论 暂时没有讨论 题目描述 在本题中,格点是 ...
- phongap+ jquery + asp.net +android,我把我遇到的问题和处理方法的连接总结一下
这些都是最基本的问题,在实际的运用中都会用到 第1章.搭建Android的开发环境-跟我学编程 Win7旗舰版中的IIS配置asp.net的运行环境 - 追夢 - 博客园 vs2012下asp.net ...