只是想知道在完全信任的 asp.net mvc 2 应用程序的上下文中两者之间是否有任何区别。
问问题
13093 次
1 回答
66
.NET Framework 推迟将程序集加载到当前 AppDomain 中,直到需要它们。例如,如果您仅从 调用第三方库,则第三方 DLL 通常在第一次运行SomeMethod()
之前不会加载。SomeMethod()
AppDomain.GetAssemblies()
为您提供所有已加载到当前 AppDomain 中的程序集。 BuildManager.GetReferencedAssemblies()
(此方法仅在.Net Framework System.Web.dll
中可用)返回从 Web.config 和其他地方引用的所有程序集的列表,并将这些程序集加载到当前 AppDomain 中。
这是上面的一个成功的例子。
SomeMethod()
还没有运行。- 调用
AppDomain.GetAssemblies()
,返回一个不包含 ThirdParty.dll 的集合。 - 打电话
SomeMethod()
。 - 调用
AppDomain.GetAssemblies()
,返回一个包含 ThirdParty.dll 的集合。
在此示例中,CLR 推迟将 ThirdParty.dll 加载到当前 AppDomain 中,直到绝对必要为止。并且由于它是执行的必要条件,SomeMethod()
所以它被加载了。
或者:
SomeMethod()
还没有运行。- 调用
AppDomain.GetAssemblies()
,返回一个不包含 ThirdParty.dll 的集合。 - 调用
BuildManager.GetReferencedAssemblies()
,返回一个包含 ThirdParty.dll 的集合。 - 调用
AppDomain.GetAssemblies()
,返回一个包含 ThirdParty.dll 的集合。
在这里,即使您从未调用过SomeMethod()
,该调用也会BuildManager.GetReferencedAssemblies()
代表您将第三方库加载到当前 AppDomain 中。
当然,这都需要进行某些优化等,但总体思路是成立的。
于 2010-03-19T17:43:06.467 回答