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

C# 在Windows CE中创建对象实例比创建反射更快,c#,reflection,.net-3.5,windows-ce,.net-cf-3.5,C#,Reflection,.net 3.5,Windows Ce,.net Cf 3.5,因此,在看了一篇描述如何实现的文章后,我感到非常兴奋,因为在我的代码中,我现在有相当多的反思。不幸的是,Windows CE不支持DynamicMethod和ILGenerator编辑:激活器在Windows CE中受支持 我想知道是否有人知道比CE中的反射更快地创建对象实例的方法。如果没有,也许有人可以解释为什么Windows CE不支持此功能,以及是否有任何解决方法可以在CE中获得此功能。即使我必须编写自己的DynamicMethod和ILGenerator类,也可能值得:)根据您的设计,您

因此,在看了一篇描述如何实现的文章后,我感到非常兴奋,因为在我的代码中,我现在有相当多的反思。不幸的是,Windows CE不支持
DynamicMethod
ILGenerator
编辑
激活器
在Windows CE中受支持


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

根据您的设计,您可能能够创建一组(编译时)实例化委托(您可以)

例如:

static class Factory<T> {
    public Func<T> Creator { get; set; }
}

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

//Elsewhere
Factory<SomeClass>.Creator = () => new SomeClass();
静态类工厂{
公共函数创建者{get;set;}
}
var实例=Factory.Creator();
//别处
Creator=()=>newsomeclass();
这只有在您可以提前使用相关类型填充工厂时才有帮助


如果您只有
类型
(与泛型参数相反),则可以将代理存储在
字典
中,但由于强制转换的原因,它的效率会降低。

您仍然需要填充字典。

首先,支持Activator。看一看


这就是说,这不是地球上最快的事情,特别是如果你打算创建一个以上的给定类型的实例。在对构建对象的不同方法进行了大量测试之后,我在中所做的是在每个类型的基础上缓存ConstructorInfo(特别是在中),并将其用于对象创建。是的,您必须在第一次使用反射来获取CI,但是后续调用非常快,因为您已经获得了委托。

这取决于具体情况。请提供更多详细信息。基本上是从任何给定的系统。类型,我希望能够尽快创建该类型的实例。您正在创建多少个对象实例?仅供参考:我已经写过同样的技术()并在框架级别使用它,但坦率地说,除非您在一个紧密的循环中创建数十万个对象,否则您将看不到任何性能改进。另外请注意,如果您只使用默认构造函数,那么框架会对其进行高度优化。这是一种可能性,但在一个大型应用程序/框架中,它似乎会变得笨拙,不幸的是,这正是我要处理的。字典的大小将变得太大,新类型将不容易支持。@tkeE:您可以只存储最常用的类型吗?这是一种可能性,但由于上面列出的原因,这并不完全可取。很难确切知道最常用的是什么,因为这是一个将被许多系统使用的框架;我从未使用过.Net CF。