Rai*_*ord 10 .net c# reflection
好的,所以我们都知道Reflecttion的性能要比"newing"类实例少得多,而且在很多情况下,根据应用程序的要求,这很好.
问题:我们如何使用后期绑定(反射)策略创建高性能.NET类.
我有一个现有的要求,即要求使用反射(CreateInstance)创建类实例,但性能至关重要.在我的情况下,我正在为我们的应用程序中的每个传入SMS消息创建实例.在生产过程中,每天可以轻松超过一百万.
我想听听并分享一些关于如何创建.NET类而不直接引用代码中的类的想法,例如使用Reflection.我还在想是否有办法以某种方式缓存一个可以改善"创建"时间的类Factory
Mar*_*ell 12
每天100万并不是很多; 我只是使用Activator.CreateInstance(使用Activator.CreatInstance(Type)显示器进行快速测试,在我的低端笔记本电脑上,它可以Type在~2秒内创建1M对象).
关于快速创建对象的想法:
: new()约束(零努力)DynamicMethod和写入IL(不是很难)的的实现new方法(而不需要: new()约束外)如下所示:ObjectFactory.cs.
有关IL示例,请参阅dapper-dot-net和il.Emit(OpCodes.Newobj, ...)
对于简单的反思调用,我不认为每天有一百万.我相信你过度优化了,但无论如何,正如你所说,只需使用一个Activator.CreateInstance调用创建一个工厂类并缓存那个.将使用CreateInstance()返回对象上的方法调用创建实际实例.
public interface IClassFactory {
IClass CreateInstance();
}
public interface IClass {
// your actual class interface.
}
public class DefaultClassFactory : IClassFactory {
public IClass CreateInstance() {
return new DefaultClass(); // the implementation class
}
}
Run Code Online (Sandbox Code Playgroud)
在某个地方,你将拥有一个static类型的字段IClassFactory,你可以使用DefaultClassFactory配置文件中指定的任何其他类的实例设置一次.
一些想法:
高速缓存中的实例克隆或在类型Dictionary<string,Type>或Dictionary<string,object>.
| 归档时间: |
|
| 查看次数: |
6728 次 |
| 最近记录: |