我目前对IIS的理解:
应用程序池维护一组工作进程(操作系统进程),在每个工作进程中有一个或多个应用程序域。
我目前的问题:
我们目前在本机代码中使用了第三方dll,我们的托管代码与此进行了对话。
此本机代码只能在每个操作系统进程中初始化一次。
当每个工作进程有多个app域时,本机代码会爆炸(因为本机代码的初始化逻辑会被当前进程多次调用)。
我理想的短期解决方法(直到第三方修复此问题):
我想将工作进程中任何时候运行的应用域数量限制为一个。我还想在工作进程中禁用应用程序域的重叠回收。这可能吗?如果是这样的话?
在IIS中,我看不到限制应用程序域的方法,只能限制工作进程。我也看不到禁用应用程序域重叠回收的方法,此选项仅适用于工作进程。
我意识到这会对我们的性能产生一些影响,例如通过禁用应用域的重叠回收,我们将获得服务中断。我对此很满意,因为总体来说,这将使我们能够通过我们正在尝试进行的当前更改来提高性能。
我也明白,这可能需要一些注册表黑客等等,但这对于临时解决方法来说很好。
任何建议都将不胜感激!
答案 0 :(得分:0)
使用自托管或将对本机代码库的访问包装到通过IIS托管应用程序中的命名管道访问的单独自托管代码中。
您正在与IIS的核心功能及其应用程序生命周期管理和运行状况监控进行斗争。要关闭某些功能,您必须访问AppPool的配置并设置其回收和高级设置以关闭所有相关功能(我不确定它是否能解决您的所有问题)。基本上这是个坏主意 - 让IIS自己完成工作或托管应用程序并构建自己的健康监控。