首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

.NET 字串取代五大方法效能實測與自訂高演算法

     編輯:關於C#

五種常見取代方法

  1. String.Replace:最簡單,不支援忽略大小寫
  2. Regex.Replace:支援 RegexOptions.IgnoreCase,功能最強但效能最差
  3. String.Substring + 字串串接:小資料量可行,大量資料因字串不可變導致大量記憶體配置
  4. Microsoft.VisualBasic.Strings.Replace:VB 執行階段函式,速度快於 Regex,支援 CompareMethod.Text
  5. StringBuilder + Split/Join:手動分割重組,效能介於 Replace 與 VB 之間

自訂高效能演算法:ReplaceEx

原理:預先計算最大可能結果長度,配置 char[] 緩衝區,單次掃描原字串,以 IndexOf 定位比對位置,直接寫入緩衝區,最後 new string(buffer, 0, count) 產生結果。支援選擇性忽略大小寫。


private static string ReplaceEx(string original, string pattern, string replacement, bool ignoreCase = true) {
    if (string.IsNullOrEmpty(pattern)) return original;
    var src = ignoreCase ? original.ToUpper() : original;
    var pat = ignoreCase ? pattern.ToUpper() : pattern;
    int maxLen = original.Length + Math.Max(0, (original.Length / pattern.Length) * (replacement.Length - pattern.Length));
    var buffer = new char[maxLen];
    int count = 0, pos0 = 0, pos1;
    while ((pos1 = src.IndexOf(pat, pos0)) != -1) {
        // 複製未比對段
        for (int i = pos0; i < pos1; i++) buffer[count++] = original[i];
        // 複製取代字串
        for (int i = 0; i < replacement.Length; i++) buffer[count++] = replacement[i];
        pos0 = pos1 + pattern.Length;
    }
    // 複製剩餘尾段
    for (int i = pos0; i < original.Length; i++) buffer[count++] = original[i];
    return new string(buffer, 0, count);
}

效能實測結果(1000 次迴圈,資料量遞增)

測試資料RegexVB ReplaceReplaceExString.Replace
短字串、少量比對3.75s1.53s0.80s0.18s
中等字串、多比對5.30s2.46s1.01s0.23s
長字串、密集比對13.59s11.68s1.70s0.42s

結論:String.Replace(區分大小寫)最快;需忽略大小寫時,ReplaceEx 大幅優於 Regex 與 VB 版本,適合高頻、大資料量場景。

選擇建議

  • 一般情況、區分大小寫 → String.Replace
  • 需忽略大小寫、中低頻 → Microsoft.VisualBasic.Strings.Replace
  • 高頻、大資料量、忽略大小寫 → 自訂 ReplaceEx 或 StringBuilder 手寫
  • 複雜模式(萬用字元、群組) → Regex.Replace(接受效能代價)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved