gpt4 book ai didi

assemblies - AppDomain.GetAssemblies 和 BuildManager.GetReferencedAssemblies 之间的区别

转载 作者:行者123 更新时间:2023-12-02 03:38:52 25 4
gpt4 key购买 nike

只是想知道在完全信任的 asp.net mvc 2 应用程序的上下文中两者之间是否有任何区别。

最佳答案

.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 推迟将 ThirdParty.dll 加载到当前 AppDomain 中,直到绝对必要为止。由于 SomeMethod() 的执行是必需的,因此它会在此时被加载。

或者:

  1. SomeMethod() 尚未运行。
  2. 调用AppDomain.GetAssemblies(),返回一个不包含 ThirdParty.dll 的集合。
  3. 调用BuildManager.GetReferencedAssemblies(),返回包含 ThirdParty.dll 的集合。
  4. 调用AppDomain.GetAssemblies(),返回包含 ThirdParty.dll 的集合。

在这里,即使您从未调用过 SomeMethod(),对 BuildManager.GetReferencedAssemblies() 的调用也会代表您将第三方库加载到当前 AppDomain 中。

当然,这一切都需要进行某些优化等,但总体思路是成立的。

关于assemblies - AppDomain.GetAssemblies 和 BuildManager.GetReferencedAssemblies 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2477787/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com