2011-06-17 46 views
3

我有一個函數可以修復C#JavaScript中的非可打印字符。但它工作非常緩慢!如何提高這個功能的速度?修復C#中JavaScript的字符串#

private static string JsStringFixNonPrintable(string Source) 
    { 
     string Result = ""; 
     for (int Position = 0; Position < Source.Length; ++Position) 
     { 
      int i = Position; 
      var CharCat = char.GetUnicodeCategory(Source, i); 
      if (Char.IsWhiteSpace(Source[i]) || 
       CharCat == System.Globalization.UnicodeCategory.LineSeparator || 
       CharCat == System.Globalization.UnicodeCategory.SpaceSeparator) { Result += " "; continue; } 
      if (Char.IsControl(Source[i]) && Source[i] != 10 && Source[i] != 13) continue; 
      Result += Source[i]; 
     } 
     return Result; 
    } 
+0

我會找http://stackoverflow.com/questions/1120198/most-efficient-way-to-remove-special-characters-from-string/1120248#1120248的正則表達式的方法作爲替代。 – 2011-06-17 03:59:12

回答

1

而不將字符串的,請嘗試使用System.Text.StringBuilder其內部維護一個字符緩衝區,並且不創建新的對象每次追加的時間。

例子:

StringBuilder sb = new StringBuilder(); 
sb.Append('a'); 
sb.Append('b'); 
sb.Append('c'); 
string result = sb.ToString(); 
Console.WriteLine(result); // prints 'abc' 
5

我已經重新編碼您使用StringBuilder類的代碼片段,與預定義緩衝區大小 ...這比你的樣本快得多。

private static string JsStringFixNonPrintable(string Source) 
    { 
     StringBuilder builder = new StringBuilder(Source.Length); // predefine size to be the same as input 
     for (int it = 0; it < Source.Length; ++it) 
     { 
      var ch = Source[it]; 
      var CharCat = char.GetUnicodeCategory(Source, it); 
      if (Char.IsWhiteSpace(ch) || 
       CharCat == System.Globalization.UnicodeCategory.LineSeparator || 
       CharCat == System.Globalization.UnicodeCategory.SpaceSeparator) { builder.Append(' '); continue; } 
      if (Char.IsControl(ch) && ch != 10 && ch != 13) continue; 
      builder.Append(ch); 
     } 
     return builder.ToString(); 
    }