日期:2014-05-16  浏览次数:20349 次

表单赋值到实体类对象的通用方法的性能问题
现在参与的项目是分布式的,使用到了thrift框架在客户端和服务端之间传递并返回数据,对性能有一定要求,碰到了这样一个需求,新增订单时,要提交表单,订单表中的字段比较多,有十多个,网上找到个这样的方法:用反射来赋值,可以简化操作,代码如下:
/// <summary> 
/// 将表单赋予对对象 
/// </summary> 
/// <param name="t">实体对象</param> 
/// <param name="form">表单集合</param> 
public static void GetValue(T t, NameValueCollection form) 

Type type = t.GetType(); 
PropertyInfo[] pi = type.GetProperties(); 
foreach (PropertyInfo p in pi) 

if (form[p.Name] != null) 

p.SetValue(t, Convert.ChangeType(form[p.Name], p.PropertyType), null); 





我想问的是这个方法用到了反射,在数据量大时会不会影响到性能? 如何来测试它的性能?能否用某种软件来测试性能?求指点一二 多谢
------解决方案--------------------
感觉在PropertyInfo[]加缓存貌似也没多大用处

LZ可以看下这篇文章  使用动态编译代替反射,性能有很大提升的
http://www.cnblogs.com/zc22/archive/2010/06/01/1749459.html

不过建议如果能直接赋值 还是自己赋值的好
------解决方案--------------------
对性能有要求不要用反射,用表达式树编译的本地代码:
关键代码类似:

http://bbs.csdn.net/topics/390600500?page=1#post-395653832