gpt4 book ai didi

c# - 为什么 AppDomain.CurrentDomain.GetAssemblies() 在某些情况下不返回 Global.asax 中的依赖程序集?

转载 作者:太空狗 更新时间:2023-10-29 18:16:10 28 4
gpt4 key购买 nike

编辑:这之前的标题是“IIS 重启和应用程序初始化之间的应用程序初始化行为不同”。我更改了标题以从 IIS/Application Initialisation 扩展问题,因为观察到的行为与 AppDomain.CurrentDomain.GetAssemblies();

有关

我正在使用 IIS 应用程序初始化模块来预热 asmx wed 服务。

我已经实现了一些预热代码以确保应用程序初始化成功 JIT 在 Global.asax Application_Start 事件中的我的 asmx 服务。这使用 System.Runtime.CompilerServices.RuntimeHelpers.PrepareMethod() 遍历应用程序中的所有程序集(它还获取所有程序集依赖项)以确保对服务的第一次调用尽可能快。

当我使用“net stop w3svc & net start w3svc”观察到这种行为时,我可以看到(通过日志记录)所有程序集都是 JIT 的,并且对服务的第一次调用如预期的那样快。

但是,当应用程序池按照其配置的时间表 (03:00:00) 自动回收时,日志显示只有直接引用的程序集是 JIT 的,而不是同样位于文件夹中的依赖项。

这会导致首次调用该服务时产生 Not Acceptable 开销。

App Init 在所有其他方面都完全按照预期执行,但是为什么 IIS 仅对应用程序池的重新循环进行 JIT 编译直接引用的程序集而不是其依赖项?

最佳答案

好吧,我在上面的评论中提到的帖子将我引向了正确的方向,然后我在这篇帖子中找到了答案:Difference between AppDomain.GetAssemblies and BuildManager.GetReferencedAssemblies

所以我的代码改为var assemblys = BuildManager.GetReferencedAssemblies();

关于c# - 为什么 AppDomain.CurrentDomain.GetAssemblies() 在某些情况下不返回 Global.asax 中的依赖程序集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18656821/

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