ASP.NET(C#) String, StringBuilder 與 StringWriter性能比較
更新時間:2007年08月18日 22:49:55 作者:
直觀認識:正面交鋒
性能測試1:StringBuilder
第 1 輪測試:用時 312.5 毫秒
第 2 輪測試:用時 421.875 毫秒
第 3 輪測試:用時 453.125 毫秒
第 4 輪測試:用時 421.875 毫秒
第 5 輪測試:用時 453.125 毫秒
性能測試2:StringWriter
第 1 輪測試:用時 406.25 毫秒
第 2 輪測試:用時 453.125 毫秒
第 3 輪測試:用時 421.875 毫秒
第 4 輪測試:用時 437.5 毫秒
第 5 輪測試:用時 437.5 毫秒
性能測試3:String(1/100 數(shù)據(jù)量)
第 1 輪測試:用時 12406.25 毫秒
您注意到了嗎?
String 連接方式在只有 1/100 數(shù)據(jù)的測試下,使用時間30倍于 StringBuilder。因此,基于性能的考量,我們絕不推薦這種方式。而 StringBuilder 較之 StringWriter 略勝一籌,具體的原因?qū)⒃谙挛闹蟹治觥.斎?,測試存在誤差,但足以說明事實。
StringWriter 與 StringBuilder:誰是強者
StringWriter 位于 System.IO 命名空間內(nèi),繼承于 TextWriter。在 .Net Reflector 的反編譯結(jié)果中顯示,它的內(nèi)部事實上是采用 StringBuilder 進行連接。無怪乎 StringWriter 會略遜一籌,它原來僅僅是 StringBuilder 的一個適配(可以稱之為 Adapter 模式)。為什么 StringBuilder 擁有如此的效率?
您注意到了嗎?
在許多地方,需要 StringWriter 而不是 StringBuilder,例如 XmlTextWriter。
StringBuilder:原因何在
關(guān)于 System.Text.StringBuilder 的研究,網(wǎng)上已有不少,其主要原理便是預先以非托管方式分配內(nèi)存,保證文本的修改與擴張,不重新創(chuàng)建一個 String 對象。而 String 對象的創(chuàng)建,便是性能瓶頸所在。它的連接效率遠超過 String,不過在少量的文本連接時,顯然 String 編程時更方便些。
性能測試1:StringBuilder
第 1 輪測試:用時 312.5 毫秒
第 2 輪測試:用時 421.875 毫秒
第 3 輪測試:用時 453.125 毫秒
第 4 輪測試:用時 421.875 毫秒
第 5 輪測試:用時 453.125 毫秒
性能測試2:StringWriter
第 1 輪測試:用時 406.25 毫秒
第 2 輪測試:用時 453.125 毫秒
第 3 輪測試:用時 421.875 毫秒
第 4 輪測試:用時 437.5 毫秒
第 5 輪測試:用時 437.5 毫秒
性能測試3:String(1/100 數(shù)據(jù)量)
第 1 輪測試:用時 12406.25 毫秒
您注意到了嗎?
String 連接方式在只有 1/100 數(shù)據(jù)的測試下,使用時間30倍于 StringBuilder。因此,基于性能的考量,我們絕不推薦這種方式。而 StringBuilder 較之 StringWriter 略勝一籌,具體的原因?qū)⒃谙挛闹蟹治觥.斎?,測試存在誤差,但足以說明事實。
StringWriter 與 StringBuilder:誰是強者
StringWriter 位于 System.IO 命名空間內(nèi),繼承于 TextWriter。在 .Net Reflector 的反編譯結(jié)果中顯示,它的內(nèi)部事實上是采用 StringBuilder 進行連接。無怪乎 StringWriter 會略遜一籌,它原來僅僅是 StringBuilder 的一個適配(可以稱之為 Adapter 模式)。為什么 StringBuilder 擁有如此的效率?
您注意到了嗎?
在許多地方,需要 StringWriter 而不是 StringBuilder,例如 XmlTextWriter。
StringBuilder:原因何在
關(guān)于 System.Text.StringBuilder 的研究,網(wǎng)上已有不少,其主要原理便是預先以非托管方式分配內(nèi)存,保證文本的修改與擴張,不重新創(chuàng)建一個 String 對象。而 String 對象的創(chuàng)建,便是性能瓶頸所在。它的連接效率遠超過 String,不過在少量的文本連接時,顯然 String 編程時更方便些。
相關(guān)文章
asp.net中利用ajax獲取動態(tài)創(chuàng)建表中文本框的值
通常在做主從表的數(shù)據(jù)錄入中,會碰到在一個頁面上同時錄入主表數(shù)據(jù)和從表數(shù)據(jù),主表的數(shù)據(jù)只有一條,從表的數(shù)據(jù)有一條到多條,這樣就要動態(tài)創(chuàng)建從表數(shù)據(jù)錄入入口。2010-03-03Global.asax的Application_Error實現(xiàn)錯誤記錄/錯誤日志的代碼
本文為大家介紹下利用Global.asax的Application_Error實現(xiàn)錯誤記錄,具體如下,有此需求的朋友可以參考下,希望對大家有所幫助2013-08-08ASP.NET Core 2.0 帶初始參數(shù)的中間件問題及解決方法
這篇文章主要介紹了ASP.NET Core 2.0 帶初始參數(shù)的中間件問題及解決方法,需要的朋友可以參考下2017-10-10.Net Core中使用ref和Span<T>提高程序性能的實現(xiàn)代碼
這篇文章主要介紹了.Net Core中使用ref和Span<T>提高程序性能的簡單實現(xiàn)代碼,需要的朋友可以參考下2017-05-05ASP.NET Core中預壓縮靜態(tài)文件的方法步驟
這篇文章主要給大家介紹了關(guān)于ASP.NET Core中如何預壓縮靜態(tài)文件的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用ASP.NET Core具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2019-03-03Asp.net中static變量和viewstate的使用方法(謹慎)
如在頁面中統(tǒng)計某個按鈕被按下的次數(shù),先在類中OnClick事件的處理過程前定義一static變量times,則每次調(diào)用該按鈕的OnClick事件時,令times增1即可,非常方便,接下來詳細介紹,感興趣的朋友可以了解下2013-01-01.NET?6新特性試用之TryGetNonEnumeratedCount?方法
這篇文章主要介紹了.NET?6新特性試用TryGetNonEnumeratedCount,這個方法可計算可枚舉類型的元素總數(shù),下面來看看具體的使用方式吧,需要的朋友可以參考一下2022-03-03C#反射技術(shù)的簡單操作(讀取和設(shè)置類的屬性)
反射的作用想必大家都知道了吧,少量屬性的自動化操作手動添加幾下當然是沒有問題的,但是屬性數(shù)量較多的時候敲起這些繁鎖的代碼可以困了,再說對擴展和維護性造成很多的不遍,以下代碼中如不能直接使用請?zhí)砑觰sing System.Text;的引用。2011-01-01