У меня проблемы с производительностью при использовании отражения.
Поэтому я решил создать делегаты для свойств моих объектов и на данный момент получил следующее:
TestClass cwp = new TestClass();
var propertyInt = typeof(TestClass).GetProperties().Single(obj => obj.Name == "AnyValue");
var access = BuildGetAccessor(propertyInt.GetGetMethod());
var result = access(cwp);
static Func<object, object> BuildGetAccessor(MethodInfo method)
{
var obj = Expression.Parameter(typeof(object), "o");
Expression<Func<object, object>> expr =
Expression.Lambda<Func<object, object>>(
Expression.Convert(
Expression.Call(
Expression.Convert(obj, method.DeclaringType),
method),
typeof(object)),
obj);
return expr.Compile();
}
Результаты были очень удовлетворительными, примерно в 30-40 раз быстрее, чем при использовании обычного метода ( PropertyInfo.GetValue (obj, null) ;
)
Проблема в следующем: Как я могу сделать SetValue
свойства, которое работает таким же образом? К сожалению не получил способ.
Я делаю это, потому что не могу использовать методы с
из-за структуры моего приложения.