いくつかのメソッド(たとえば、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回だけロードし、クラス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
違いはありますか?ドメインなどは、コード内で変更(または使用)されることはありません。