gpt4 book ai didi

c# - 使用反射将数据读取器转换为列表的最快方法

转载 作者:行者123 更新时间:2023-11-30 20:14:09 24 4
gpt4 key购买 nike

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

最佳答案

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

List<MyClass> list = LoadFromDataReader<MyClass>(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) 步成为瓶颈),那么您必须避免使用反射并生成代码来直接设置属性。一些替代改进:

  • 使用System.CodeDom 生成一个C# 类,其中包含根据IDataReader 上的各个字段设置属性的代码。请注意,System.CodeDom 在后台调用 csc.exe 编译器,因此您需要在启动时生成一次此代码,并在每次调用时重新使用它。<
  • 使用 System.Reflection.Emit.DynamicMethod 生成设置属性的 IL 代码。运行时开销比 System.CodeDom 少,但由于您生成的是原始 IL,因此编写和调试起来要困难得多。作为最后的选择使用。

关于c# - 使用反射将数据读取器转换为列表的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/812034/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com