繁体   English   中英

在同一类中的多个方法中的Assembly.Load()可以加载同一程序集-是否最佳?

[英]Assembly.Load() in multiple methods within the same class to load the same assembly - optimal or not?

我有一个带有多个方法的类(例如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),将对类Assembly属性的引用存储起来,然后在内部方法(Method1,Method2,Method3 ..)中使用此引用,而不是始终调用Assembly会更好。加载()? 这样,代码将类似于:

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

有什么区别吗? 域等永远不会在代码内部更改(甚至使用)。

没有什么大的区别,因为程序集将在相同的上下文中加载。 然后,如果程序集已经加载,即使调用Assembly.LoadFrom(path);也不会重新加载该程序集Assembly.LoadFrom(path);

但是,如果您已经知道所有方法都在同一个程序集中,则最好只调用一次Assembly.LoadFrom

据我所知,多次加载同一程序集不会导致性能问题。 但是,看看您的方法,有

var o = Activator.CreateInstance(type); 

您正在绝对类型的object的新实例上调用成员方法。

虽然这可能不会引起问题,但只是多余的行为,不是吗? 我认为这只是浪费,并增加了垃圾收集量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM