我的应用程序付出了性能损失,因为我使用反射,特别是获取类和属性的属性。
为了优化我的应用程序,我想生成一个基于反射的库,但在运行时替换它。
今天我用的是:
MyAttribute[] attributes = (MyAttribute[])Attribute.GetCustomAttributes(typeof(CurrentNamespace.MyClass), typeof(MyAttribute));
var x = GetX(attributes);
我可以在不同的命名空间中生成具有相同类名的类,并静态调用它。
MyReflectingClassInterface reflectingClass = getClassFromAssembly("ReflectingNamespace.MyClass");
var x = reflectingClass.getX(); // can't be static if I want to use interface.
,或者也许最好的方法是使用一个静态开关:
static public X getX(Type type){
if(type == typeof(CurrentNamespace.MyClass))
return new X(5); // hard coded answer
}
我创建了一个静态文件,在开发过程中使用反射生成,在运行时我只查询这个静态类,它解决了所有性能问题。