在C#中我們知道使用StringBuilder能提高大量字串拼接的效率,其實StringBuilder的效率也可以提升,那就是使用ObjectPool,本文將介紹怎么使用ObjectPool提高StringBuilder的性能,
一、簡介 C# ObjectPool類是一個內置的類別庫,用于實作物件池模式,它允許您通過在應用程式中創建預定義數量的物件實體,使它們可供重用,使用時不需要每次都創建一個新物件,從而減少了物件創建和銷毀的開銷,ObjectPool類還提供了對物件池大小和物件的生命周期的控制,
二、使用ObjectPool<StringBuilder>和性能測驗 首先新建一個.NET7控制臺專案,然后使用nuget包管理器安裝ObjectPool包“Microsoft.Extensions.ObjectPool”,也可以使用nuget代碼安裝,包安裝后就可以開始使用它了,代碼使用步驟如下:
1、創建StringBuilder的ObjectPool池:
private readonly ObjectPool<StringBuilder> _stringBuilderPool = new DefaultObjectPoolProvider().CreateStringBuilderPool();
2、請使用 Get() 從池中獲取 StringBuilder,如下所示,
var sb = this._stringBuilderPool.Get();
3、像 StringBuilder一樣使用,模擬連接陣列中的字串,
for (var index = 0; index < this._stringArray.Length; index++) { _ = sb.Append(this._stringArray[index]); }
4、當不再需要StringBuilder 時,將其回傳到池中,
_stringBuilderPool.Return(sb);5、與單獨使用StringBuilder 性能測驗對比首先使用單例創建一個ObjectPool<StringBuilder>,然后新建一個30萬的字串陣列,然后分別使用ObjectPool<StringBuilder>和StringBuilder回圈拼接字串,在使用程序中用Stopwatch 計時,字串的個數逐漸遞減來測驗,代碼如下:
//參考ObjectPool using Microsoft.Extensions.ObjectPool; static void Main(string[] args) { #region //創建測驗陣列 List<string> _stringArray=new List<string>(); for (int i = 0; i <300000; i++) { _stringArray.Add("歡迎關注公眾號:DOTNET開發跳槽"+i); } //創建Stopwatch 計時 Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); //創建一個 ObjectPool<StringBuilder> ObjectPool<StringBuilder> _stringBuilderPool =new DefaultObjectPoolProvider().CreateStringBuilderPool(); var sb = _stringBuilderPool.Get(); for (var index = 0; index < _stringArray.Count; index++) { _ = sb.Append(_stringArray[index]); } _stringBuilderPool.Return(sb); stopwatch.Stop(); // 獲取TimeSpan值形式的運行時間, TimeSpan ts = stopwatch.Elapsed; Console.WriteLine($"使用ObjectPool的運行時間:{ts.Ticks}"); //重新計時 stopwatch.Restart(); //使用StringBuilder實作 StringBuilder sb2 = new StringBuilder(); for (var index = 0; index < _stringArray.Count; index++) { _ = sb2.Append(_stringArray[index]); } stopwatch.Stop(); TimeSpan ts2 = stopwatch.Elapsed; Console.WriteLine($"使用StringBuilder的運行時間:{ts2.Ticks}"); #endregion }

由測驗可以看出,在5萬以上ObjectPool<StringBuilder>的效率要高于StringBuilder的,大家使用時可以參考,具體效率根據電腦配置和電腦的使用行程情況來定,非專業測驗,以上測驗僅供參考,
結語本文講述了C#使用ObjectPool提高StringBuilder性能的方法,并用案例對比測驗了使用StringBuilder和使用ObjectPool<StringBuilder>的情況,由測驗結果來看,并非在所有情況使用ObjectPool<StringBuilder>效率就高,也正如StringBuilder在資料量小的情況下不推薦使用,另外ObjectPool不止這點功能,它可以加入其它物件,幫助減少物件創建和銷毀的開銷,并提高應用程式的性能,希望本文對你有所識訓,同時歡迎留言吐槽,
參考:微軟.NET官方檔案
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/547051.html
標籤:C#
上一篇:推薦幾款三維模型幾何糾正處理軟體
下一篇:推薦幾款三維模型幾何糾正處理軟體