35

完全に信頼できるasp.netmvc2アプリケーションのコンテキストで、2つの間に違いがあるかどうかを知りたいだけです。

4

1 に答える 1

66

.NET Framework は、アセンブリが必要になるまで、現在の AppDomain へのアセンブリの読み込みを延期します。たとえば、サード パーティのライブラリを からのみ呼び出した場合SomeMethod()、サード パーティの DLL は通常、初回SomeMethod()実行時までロードされません。

AppDomain.GetAssemblies()現在の AppDomain に既に読み込まれているすべてのアセンブリを提供します。 BuildManager.GetReferencedAssemblies()(このメソッドは.Net Framework System.Web.dllでのみ使用できます) Web.config および他の場所から参照されるすべてのアセンブリのリストを返し、それらのアセンブリを現在の AppDomain に読み込みます。

上記を具体化した例です。

  1. SomeMethod()まだ実行していません。
  2. を呼び出しAppDomain.GetAssemblies()、ThirdParty.dll を含まないセットを返します。
  3. コールしSomeMethod()ます。
  4. を呼び出しAppDomain.GetAssemblies()、ThirdParty.dll を含むセットを返します。

この例では、CLR は、絶対に必要になるまで、現在の AppDomain への ThirdParty.dll の読み込みを延期します。の実行に必要なのでSomeMethod()、そのときにロードされます。

または:

  1. SomeMethod()まだ実行していません。
  2. を呼び出しAppDomain.GetAssemblies()、ThirdParty.dll を含まないセットを返します。
  3. を呼び出しBuildManager.GetReferencedAssemblies()、ThirdParty.dll を含むセットを返します。
  4. を呼び出しAppDomain.GetAssemblies()、ThirdParty.dll を含むセットを返します。

ここでは、 を呼び出したことはありませんが、代わりにサードパーティ ライブラリを現在の AppDomain にロードするSomeMethod()ための呼び出しです。BuildManager.GetReferencedAssemblies()

もちろん、これはすべて特定の最適化などの対象となりますが、一般的な考え方は当てはまります。

于 2010-03-19T17:43:06.467 に答える