2

我们有一个 ASP.NET 应用程序,它使用一个 .NET 组件(我们创建),该组件引用了一个看起来很容易泄漏的非托管第三方 COM DLL。第三方 DLL 是一个仅 32 位的组件,在大量使用时会分配大量内存。最终我们遇到了致命错误,需要关闭托管组件的 w3wp 进程(通常通过 IISReset),大概是因为无法在 32 位进程的内存空间中分配更多内存。

我的问题是,是否有一种相对简单的方法可以将我们的 ASP.NET 应用程序和/或 .NET 组件转换为在进程外运行,以便单个实例或实例池将在单独的进程中运行并且 1) 更少受32 位内存限制;和 2) 更能够通过终止主机进程进行清理?我想我可以使用 System.Diagnostics.Process.Create 来创建一个简单的进程外壳,该外壳可以创建并向客户端提供实例。但是我不确定如何在客户端和服务器之间建立连接。也许我必须以某种方式使用 WCF,但是我对如何在进程中汇集对象的控制较少,对吗?只是为了让某些东西在一个单独的进程中运行,这似乎是一个很大的复杂性开销。我们将不胜感激有关最简单路径的建议。

编辑:以前创建进程外 COM 组件不是很简单吗?纯 .NET 中有没有这么简单的东西?

4

1 回答 1

0

我认为使用 IIS 设施作为设计如此糟糕的组件的拐杖更容易。您可以在使用一定数量的内存时启用回收或通过在 Process Model 下的 Maximum Worker Processes 中设置一个以上来运行 Web Garden 模式。这些选项位于 IIS 管理器中应用程序池的高级设置下。

于 2013-08-08T17:14:44.280 回答