程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 翻String.Format源碼發現的新東西:StringBuilderCache,

翻String.Format源碼發現的新東西:StringBuilderCache,

編輯:C#入門知識

翻String.Format源碼發現的新東西:StringBuilderCache,


起因:

記不清楚今天是為毛點想F12看String.Format的實現源碼了,反正就看到了下圖的鳥東西:

image

瞬間石化有沒有,StringBuilder還能這麼獲取?

研究StringBuilderCache類

下面的事件也簡單,果斷在StringBuilderCache上面點了F12看源碼(Resharpe真是好東西啊。。。)

image

首先看到的是這是一個internal的類,怪不得沒見有人這麼寫過呢!

研究一番之後,終於弄清楚這貨是干嘛的了:這個類的作用就是緩存一個StringBuilder對象,給那些並不是要做很多Append操作的地方使用的,我們也看到private const int MAX_BUILDER_SIZE = 360,它內部用來判斷是用緩存的StringBuilder函數新new出來一個的界限閥值是360.

這個類的流程是這樣:

1、調用Acquire方法獲取一個StringBuilder,capacity大於360直接new,否則就用StringBuilderCache.CachedInstance這個ThreadStatic變量,當然之後要清空CachedInstance這個變量以防止線程內連續調用Acquire方法獲得同一個StringBuilder引用。

2、GetStringAndRelease返回最後的string對象,然後緩存StringBuilder到CachedInstance變量上去。

測試性能

寫了簡單的驗證StringBuilderCache的控制台程序:

image

最終的結果,可以明顯看到大量調用的優勢:

image

本文源碼地址:https://github.com/a407121393/MyDotNetTestProj/tree/master/MyTestSln/TestStringBuilderCache

用到的Util類在另一個目錄裡面:https://github.com/a407121393/MyDotNetTestProj/tree/master/MyTestSln/Util

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved