我有一个包含多个方法(例如 Method1、Method2、Method3)的类,并且在每个方法中我加载一个程序集(每个方法中相同的一个)并调用某个方法(反射),如下所示:
void Method1() // error handling etc. omitted
{
Assembly asm = Assembly.LoadFrom(path);
Type type = asm.GetType(classname);
MethodInfo methodInfo = type.GetMethod("MethodName", ...);
var o = Activator.CreateInstance(type);
var result = methodInfo.Invoke(o, parameters);
}
如果所有这些方法都加载相同的程序集,那么以这种方式进行反射在性能方面是否可行?然后代码如下所示:
obj.Method1(); // calls Assembly.Load()
obj.Method2(); // calls Assembly.Load()
obj.Method3(); // calls Assembly.Load()
或者最好在单独的方法中仅加载一次程序集(可能还有 GetType),存储对类程序集属性的引用,并且内部方法(方法 1、方法 2、方法 3 ..)使用此引用而不是始终调用程序集。加载()?这样,代码将类似于:
obj.LoadMyAssembly(); // calls Assembly.Load() and uses obj.MyAssembly property to store the reference
obj.Method1() // doesn't call Assembly.Load(), uses obj.MyAssembly instead
obj.Method2() // doesn't call Assembly.Load(), uses obj.MyAssembly instead
obj.Method3() // doesn't call Assembly.Load(), uses obj.MyAssembly instead
它有什么不同吗?域等在代码中永远不会改变(甚至使用)。