0

文字列値を置き換えるCLR関数があります。しかし、それは長時間実行されます。この機能を改善して実行速度を上げるにはどうすればよいですか?

    public static SqlString ReplaceValues(String Value)
    {
    // Put your code here
    char[] c = new char[] { '.' };
    Value= Value.Trim();
    Value = Value.Trim(c);
    Value = Value.Replace("'", "").Replace(")", " ").Replace("(", " ").Replace("-", " ").Replace("_", " ");

    Value = Regex.Replace(Value, @"[י", "+[י");
    Value = Regex.Replace(Value, @"\s+", " ");

    return new SqlString(Value.Trim());

   }

編集:値を使用するように関数を変更しました。置き換えてください。より良いですが、それでも予想よりも多くの時間が実行されます。

     public static SqlString ReplaceStreetValues(String Value)
    {
    // Put your code here
    Value = Value.Trim();
    char[] c = new char[]{'.'}; 
    Value = Value.Trim(c);

    Value= Value.Replace("'", "").Replace(")", " ").Replace("(", " ").Replace("-", " ").Replace("_", " ").Replace("רח", "");
   while (Value.IndexOf("  ")!=-1)
        Value = Value.Replace("  ", " ");
   while (Value.IndexOf("hh") !=-1)        
        Value = Value.Replace("hh", "h");

    return new SqlString(Value.Trim());

    }

ありがとう!!!

4

1 に答える 1

2

代わりにStringBuilder.Replaceを使用してみてください。

パフォーマンスが大幅に向上するはずです。

これは、呼び出しstring.Replace(..)ではなく、置換のように有効です。regexしかし、どうやらボトルネックはstring通話にあります。

編集

例 (擬似コード):

char[] c = new char[]{'.', ' '}; 
Value = Value.Trim(c);
var sb = new StringBuilder(Value);   

sb.Replace("'", "");
sb.Replace(")", " ");
sb.Replace("(", " ");
sb.Replace("-", " ");
sb.Replace("_", " ");
sb.Replace("רח", "");
于 2012-06-17T06:47:52.063 に答える