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:原因何在
關于 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:原因何在
關于 System.Text.StringBuilder 的研究,網(wǎng)上已有不少,其主要原理便是預先以非托管方式分配內(nèi)存,保證文本的修改與擴張,不重新創(chuàng)建一個 String 對象。而 String 對象的創(chuàng)建,便是性能瓶頸所在。它的連接效率遠超過 String,不過在少量的文本連接時,顯然 String 編程時更方便些。
相關文章
.NET實現(xiàn)Repeater控件+AspNetPager控件分頁
本文給大家分享的2個示例,演示AspNetPager最基本的功能,幫助您認識AspNetPager分頁控件及了解它的工作原理。有需要的小伙伴可以參考下2015-11-11
在一個網(wǎng)站下再以虛擬目錄的方式掛多個網(wǎng)站的方法
在一個網(wǎng)站下再以虛擬目錄的方式掛N個網(wǎng)站的方法2010-04-04
.NET實現(xiàn)ChatGPT的Stream傳輸?shù)倪^程
這篇文章主要介紹了.NET如何實現(xiàn)ChatGPT的Stream傳輸,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-07-07
C#反射(Reflection)對類的屬性get或set值實現(xiàn)思路
可以使用反射動態(tài)創(chuàng)建類型的實例,將類型綁定到現(xiàn)有對象,或從現(xiàn)有對象獲取類型并調(diào)用其方法或訪問其字段和屬性,接下來為大家介紹下對一個類別的屬性進行set和get值,感興趣的各位可以參考下哈2013-03-03
利用noesis.Javascript開源組件.Net中執(zhí)行javascript腳本
利用Noesis.Javascript開源組件可以做到在.net中執(zhí)行js腳本,同時js腳本也能調(diào)用C#函數(shù)。這個組件的獲得方式:在NuGet中輸入搜索"Noesis"就能找到,我們來做個搜索功能:用戶能夠在textbox中輸入js腳本來篩選list記錄2013-12-12
.Net?Core?3.1?Web?API基礎知識詳解(收藏)
這篇文章主要介紹了.Net?Core?3.1?Web?API基礎知識,本文內(nèi)容篇幅有點長,大家耐心閱讀,此文結(jié)合示例代碼給大家講解的非常詳細,需要的朋友可以參考下2022-04-04
解決Win10無法安裝.Net Framework 3.5提示錯誤代碼0x800F081F
這篇文章主要介紹了Win10無法安裝.Net Framework 3.5提示錯誤代碼0x800F081F的完美解決方法,需要的朋友可以參考下2017-12-12

