我有一个实用程序类,可以将对象转换为DataTables,反之亦然。从DataTable转换为对象列表时,我们在加载大量数据时遇到问题。我们使用自定义属性来确定和关联列信息。这是伪代码:
For each row in the table
For each property in an object
For each attribute on that property
If the attribute is our column information attribute
Grab the data from the table and insert the value into the objects property
End
End
End
End
对于有数百行的DataTable结果,此过程需要分钟 ...而这在Web应用程序中是不可接受的。
所以,我的问题是:是否有一些简单的方法来来回转换DataTable和.NET(自定义)数据对象,这不需要大量的反射(这可能是所有开销都在这里情况)?
编辑:原来这是数据对象本身的另一个问题。尽管如此,我还是通过反射调用对插件进行了优化,所以非常感谢大家。
答案 0 :(得分:0)
它必须是动态的吗?如果没有,您可以使用LINQ to DataSet:
from tr in table.AsQueryable()
select new MyObject
{
A = tr.Field<string>("A"),
.
.
}
否则,它必须依赖于反射。确保您没有在循环中获取类型和属性信息,因为这可能需要一些时间。与属性相同:考虑在循环之前构建具有该属性的属性的索引,然后使用此属性名称索引来获取所需的属性。这样,唯一的反映就是将值设置到对象中。
或者,您可以尝试使用ASP.NET中的异步功能卸载工作,或者考虑使用并行扩展来使用多核处理进行转换。