如何改进CLR功能中的Replace功能?

时间:2012-06-17 06:30:37

标签: c# regex sql-server-2008 replace sqlclr

我有一个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());

   }

编辑: 我改变了我的函数以使用value.Replace,它更好,但它仍然比预期运行更多的时间:

     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());

    }

感谢!!!

1 个答案:

答案 0 :(得分:2)

尝试改为使用StringBuilder.Replace

应该显着提高效果。

这有效,如string.Replace(..)替代,而不是regex次调用。 但显然瓶颈在于string电话。

修改

示例( pesudocode ):

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("רח", "");