在Windows CE中创建比反射更快的对象实例

所以在看了一篇描述如何比反射更快地创建对象实例的文章之后我非常兴奋,因为在我的代码中我目前有相当多的反思。不幸的是,Windows CE不支持
DynamicMethod
ILGenerator
。编辑:Windows CE支持
Activator
我想知道是否有人知道如何以比CE中的反射更快的速度创建对象实例。如果没有,也许有人可以解释为什么Windows CE不支持此功能,以及是否有任何解决方法在CE中获得此功能。即使我必须编写自己的
DynamicMethod
ILGenerator
类代码,也许值得:)     
已邀请:
首先,支持Activator。看看这里的文档。 也就是说,它不是地球上最快的东西,特别是如果你打算创建给定类型的多个实例。在对构建对象的不同方法进行大量测试之后,我在OpenNETCF.IoC框架中所做的是基于每个类型(特别是在ObjectFactory类中)缓存ConstructorInfo并将其用于对象创建。是的,您必须首次使用反射来获取CI,但后续调用非常快,因为您已经获得了委托。     

bab

根据您的设计,您可能能够创建一组(编译时)实例化委托(您可以存储在静态类中)。 例如:
static class Factory<T> {
    public Func<T> Creator { get; set; }
}

var instance = Factory<TSomething>.Creator();

//Elsewhere
Factory<SomeClass>.Creator = () => new SomeClass();
这只有在您可以提前使用相关类型填充工厂时才有用。 如果您拥有的只是一个
Type
(而不是通用参数),您可以将代表存储在一个
Dictionary<Type, Func<object>>
中,尽管由于投射而效率较低。 你仍然需要填充字典。     

要回复问题请先登录注册