簡體   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