所以在看了一篇描述如何Create Object Instances Faster Than Reflection的文章后,我感到非常兴奋,因为在我的代码中,我目前有相当多的反思。很遗憾,Windows CE不支持DynamicMethod
和ILGenerator
。 编辑:Windows CE支持Activator
我想知道是否有人知道如何以比CE中的反射更快的速度创建对象实例。如果没有,也许有人可以解释为什么Windows CE不支持此功能,以及是否有任何解决方法在CE中获得此功能。即使我必须编写自己的DynamicMethod
和ILGenerator
类代码,也许值得:)
答案 0 :(得分:2)
首先,支持Activator。看看the docs here。
那就是说,这不是地球上最快的东西,特别是如果你打算创建给定类型的多个实例。在对构建对象的不同方法进行大量测试之后,我在OpenNETCF.IoC framework中所做的是基于每个类型(特别是在ObjectFactory class)缓存ConstructorInfo并将其用于对象创建。是的,你必须使用反射来第一次获得CI,但随后的调用非常快,因为你已经有了代表。
答案 1 :(得分:1)
根据您的设计,您可以创建一组(编译时)实例化代理(您可以store in a static class)。
例如:
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>>
中,但由于投射效率较低。
你仍然需要填充字典。