有没有提高这种方法的速度/效率?它在我的代码中被称为数万次,并且正在减慢我正在开发的系统。
基本上,' Field'有一个名字'和价值'我需要检查它是否与我班级中相应属性的名称/值相匹配。 Field.Value也可以是正则表达式。我想正则表达式正在减慢一些事情。
private bool FieldMatch(Field field)
{
var propValue = GetPropertyValue(field.Name);
var regEx = new Regex(field.Value, RegexOptions.IgnoreCase);
var stringMatch = string.Compare(propValue, field.Value, StringComparison.InvariantCultureIgnoreCase )
return (stringMatch == 0) || regEx.IsMatch(propValue);
}
答案 0 :(得分:1)
我有两个解决这个问题的方法。
一种是将预编译的Regex添加到Field类中,如下所示:
public class Field
{
public string Name { get; set; } // Should ultimately be an enum.
public string Value { get; set; }
public Regex RegexValue
{
get {
return _regexValue ?? (_regexValue =
new Regex(Value, RegexOptions.Compiled | RegexOptions.IgnoreCase));
}
}
private Regex _regexValue;
}
private bool FieldMatch(Field field)
{
var propValue = GetPropertyValue(field.Name);
var stringMatch = string.Compare(propValue, field.Value, StringComparison.InvariantCultureIgnoreCase);
return (stringMatch == 0) || field.RegexValue.IsMatch(propValue);
}
另一种是使用静态正则表达式:
private bool FieldMatch(Field field)
{
var propValue = GetPropertyValue(field.Name);
var stringMatch = string.Compare(propValue, field.Value, StringComparison.InvariantCultureIgnoreCase);
return (stringMatch == 0) || Regex.IsMatch(propValue, field.Value);
}
哪一个最快取决于系统的规模,但两者都比以前的解决方案有了很好的改进