【发布时间】:2023-03-25 16:33:01
【问题描述】:
我们在 .net 项目中引用了第 3 方专有的 CLI DLL。该 DLL 只是其专有 C++ 库的接口。我们的项目是一个 asp.net (MVC4/Web API) 网络应用程序。
C++ 非托管库相当不稳定。有时它会崩溃,例如悬空指针。我们没有办法解决,使用这个库是一流的客户需求。
当应用程序崩溃时,IIS 中的应用程序池不再响应。我们必须重新启动它,这样做需要几分钟(是的,很长!)。
我们希望防止这个不稳定的 DLL 使我们的应用程序崩溃。最好的方法是什么?我们可以将 CLI DLL 保存在单独的 AppDomain 中吗?怎么样?
提前致谢。
【问题讨论】:
-
你观察到了什么?在一定数量的调用后进程是否挂起?你怀疑不稳定的 DLL 有内存泄漏吗?
-
内存泄漏直到现在都不是问题。在开发过程中,DLL 有时会因内存访问冲突而使开发服务器崩溃。有时开发服务器会使用约 70% 的 CPU,直到我终止该进程。在 IIS 中部署时,崩溃和 CPU 问题并没有真正发生,但偶尔 IIS 进程停止响应,并且 IIS 重新启动需要很长时间。
-
您是否尝试过提高 IIS 进程回收率?
-
这无济于事,因为问题是我们得到了悬空指针 - 回收将有助于解决内存泄漏
标签: asp.net .net iis command-line-interface unmanaged