c# - 如何使用反射创建高性能 .NET 类?

标签 c# .net reflection

好吧,我们都知道反射的性能比“新建”一个类实例要低很多倍,而且在很多情况下这很好,具体取决于应用程序的要求。

问题:我们如何使用后期绑定(bind)(反射)策略创建高性能 .NET 类。

我有一个现有要求,要求使用反射 (CreateInstance) 创建类实例,但性能至关重要。在我的情况下,我正在为我们应用程序中的每个传入 SMS 消息创建实例。在生产期间,这很容易每天超过一百万。

我想听听并分享一些关于如何在不直接引用代码中的类的情况下创建 .NET 类的想法,例如使用反射。我也在想是否有办法以某种方式缓存可以缩短“创建”时间的类工厂

最佳答案

一天一百万不算多;我只是使用 Activator.CreateInstance(使用 Activator.CreatInstance(Type) 的快速测试表明在我的笔记本电脑上它可以从 Type 创建 1M 对象 在 ~2 秒内)。

关于快速创建对象的思考:

  • 使用泛型和 : new() 约束(零努力)
  • 使用 DynamicMethod 并编写 IL(不难)

此处显示了 new 方法的实现(不需要 : new() 外部约束):ObjectFactory.cs .

有关 IL 示例,请参阅 dapper-dot-netil.Emit(OpCodes.Newobj, ...)

关于c# - 如何使用反射创建高性能 .NET 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1112194/

相关文章:

c# - DateTime.TryParse API 关于日期元素分隔符或定界符的内部行为

c# - 如何在某些时间段内对流进行分区(GroupBy)并监视 Rx 中元素的缺失?

c# - Entity Framework Code First 与同一类的双重关系

.net - 2009 年 6 月的 WPF 工具包在将发送给客户的应用程序中使用是否安全?

c# - 将 ObjectHandle 转换为 UserControl

c# - 如何在应用程序启动时立即显示光标?

c# - 捕获正则表达式 C# 中的特定或组

c# - 罗斯林编译 : type is defined in an assembly that is not referenced

c# - ASP.Net 和 GetType()

java - 通过接口(interface)中的对象常量使用反射进行迭代