我们有一个ASP.NET应用程序,它使用一个.NET组件(我们创建)引用了一个看起来非常漏洞的非托管第三方COM DLL。第三方DLL是一个仅限32位的组件,在大量使用时会分配大量内存。最终我们遇到了致命的错误,这些错误需要托管组件的w3wp进程关闭(通常是通过IISReset),大概是因为在32位进程的内存空间中无法分配更多的内存。
我的问题是,是否有一种相对简单的方法将我们的ASP.NET应用程序和/或.NET组件转换为在进程外运行,以便单个实例或实例池将在不同的进程中运行并且1)受32位内存限制的限制较少; 2)通过终止主机进程更能清理?我想我可以使用System.Diagnostics.Process.Create来创建一个可以创建并向客户端提供实例的进程的简单shell。但我不确定如何在客户端和服务器之间建立连接。也许我不得不以某种方式使用WCF,但是后来我对如何在进程中汇集对象的控制权较少?而且复杂性似乎只是为了让某些东西在一个单独的进程中运行。建议最简单的路径。
编辑:创建进程外COM组件过去是不是很简单?在纯.NET中有什么简单的东西吗?
答案 0 :(得分:0)
我认为使用IIS工具作为这种设计不佳的组件的拐杖更容易。您可以在使用特定数量的内存时启用回收,或通过在Process Model下的Maximum Worker Processes中设置多个来运行Web园模式。这些选项位于IIS管理器中“应用程序池”的“高级设置”下。