Csharp/C#教程:使用reflection将datareader转换为列表的最快方法分享


使用reflection将datareader转换为列表的最快方法

我正在使用reflection将datareader转换为通用集合列表。 任何人都可以建议我为此实现reflection的最佳方法吗? 我想要最快的路?

我假设你想做的事情是这样的:

 List list = LoadFromDataReader(dataReader); 

有:

 class MyClass { [DataField("FirstName")] public string FirstName { get; set; } [DataField("LastName")] public string LastName { get; set; } } 

我是这样做的:

  1. 使用Type.GetPropertiesPropertyInfo.GetCustomAttribute将字典映射字段名称放到PropertyInfo对象中
  2. 在每条记录的每个字段上调用PropertyInfo.SetValue

您可以缓存步骤(1)的结果,因为字段/属性映射在应用程序的生命周期中不会更改。

如果性能是一个问题(即如果步骤(2)结果是瓶颈),那么您必须避免使用reflection并生成代码来直接设置属性。 一些替代改进:

https://blogs.msdn.com/meek/archive/2008/04/25/using-linq-expressions-to-generate-dynamic-methods.aspx

这就是我认为你在寻找的东西。

这实际上取决于你正在做什么。 我实现了一个对象/接口进程,我在其中创建了包含返回数据的信息对象。 然后我使用接口IFillable或类似的东西将DR传递给对象,并且对象从DR进行水合作用。

这样我就不需要reflection,性能也很好。 然后,我为FillFillCollection提供了一些通用的辅助方法。

我基于DotNetNuke框架的CBO对象内部的东西得到了这个想法。 它也实现了一种reflection方法,性能相当不错。

上述就是C#学习教程:使用reflection将datareader转换为列表的最快方法分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1025813.html

(0)
上一篇 2022年1月9日
下一篇 2022年1月9日

精彩推荐