http://msdn.microsoft.com/en-us/magazine/cc163473.aspx linkindeki Clr işlevini geliştirmeye çalışıyorum.Daha hızlı bir normal ifade clr işlevi oluşturun
public static partial class UserDefinedFunctions
{
public static readonly RegexOptions Options =
RegexOptions.IgnorePatternWhitespace |
RegexOptions.Singleline;
[SqlFunction]
public static SqlBoolean RegexMatch(
SqlChars input, SqlString pattern)
{
Regex regex = new Regex(pattern.Value, Options);
return regex.IsMatch(new string(input.Value));
}
}
select * from Table1 where dbo.RegexMatch(col1, 'pattern') = 1
yürütmek zaman, Clr fonksiyonu tablodaki her satır için yeni Regex nesne oluşturmak.
Her Sql ifadesi için yalnızca bir Regex nesnesi oluşturmak mümkün mü? Her satır için sadece regex.Ismatch(...)
'u arayın. Aşağıdaki kod geçerli mi? statik regex ait
public static partial class UserDefinedFunctions
{
public static readonly RegexOptions Options =
RegexOptions.IgnorePatternWhitespace |
RegexOptions.Singleline;
static Regex regex = null;
[SqlFunction]
public static SqlBoolean RegexMatch(
SqlChars input, SqlString pattern)
{
if (regex == null)
regex = new Regex(pattern.Value, Options);
return regex.IsMatch(new string(input.Value));
}
}
Makale, "RegexOptions.Compiled" işlevini kullanırsanız önbelleğe alınmış olabilir, ancak bununla ilgili başka bir kanıt göremediğimizi belirtir ... –
İlginç. Regex kurucusu derlenmiş ve aynı desen seçeneğine sahipse Regex örneğini yeniden kullanır mı? Singleton modelini düşünüyordum ama singletonun hayatından emin değilim. – ca9163d9
Aynı gerçek * örneği * yeniden kullanmaz, ancak önceki örneği oluşturmak için yapılan tüm işleri yeniden kullanabilir. –