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

时间:2011-02-28 21:26:14

标签: c# reflection .net-3.5 windows-ce .net-cf-3.5

所以在看了一篇描述如何Create Object Instances Faster Than Reflection的文章后,我感到非常兴奋,因为在我的代码中,我目前有相当多的反思。很遗憾,Windows CE不支持DynamicMethodILGenerator编辑:Windows CE支持Activator

我想知道是否有人知道如何以比CE中的反射更快的速度创建对象实例。如果没有,也许有人可以解释为什么Windows CE不支持此功能,以及是否有任何解决方法在CE中获得此功能。即使我必须编写自己的DynamicMethodILGenerator类代码,也许值得:)

2 个答案:

答案 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>>中,但由于投射效率较低。 你仍然需要填充字典。