.NET比较表达式树对性能影响(2)
版本二:生成强类型委托。强类型委托改掉了DynamicInvoke带来的性能问题。
说明:强类型委托我知道的有两种方式:
第一:Func<(T, TResult> 泛型委托,当然这种委托还包含一个参数以上的方式,但它需要有返回值。
第二:Action<T, 参数类型>,与Func不同的就是它并不需要返回值。所以下面我采用了Action方式。
{
ParameterExpression parameter = Expression.Parameter(typeof(T), "x");
ParameterExpression value = Expression.Parameter(typeof(string), "propertyValue");
MethodInfo setter = typeof(T).GetMethod("set_" + propertyName);
MethodCallExpression call = Expression.Call(parameter, setter, value);
var lambda = Expression.Lambda<Action<T, string>>(call, parameter, value);
var exp = lambda.Compile();
for (int i = 0; i < collection.Count; i++)
{
exp(collection[i], propertyValue);
}
return collection;
}
版本二和反射方式的性能比较:先帖下相关代码
1:实体类:
{
public string sTitle
{ get; set; }
public string sContent
{ get; set; }
public int iID
{ get; set; }
}
2:修改任务泛型实体集属性类:上面都有,就不重复了。
3:构造一个包含一百万的实体集:
{
List<Book> list = new List<Book>();
for (int i = 0; i < 1000000; i++)
{
Book b = new Book();
b.sTitle = "标题" + i.ToString();
b.sContent = "内容" + i.ToString();
b.iID = i;
list.Add(b);
}
return list;
}
- 上一篇:C#农历计算查询(公历与农历之间转换)
- 下一篇:.net剪切图片源码