无限循环 - ASP.NET 执行未超时

Infinite Loop - ASP.NET execution not timing out

我们有一个 C# ASHX 处理程序,它使用 [DllImport] 调用非托管 C 库。

在某些情况下,非托管 C 库陷入无限循环,但是 ASP.NET 不会终止它,导致 WorkerProcess w3wp.exe 无限消耗 100% CPU 内核.

在另一个简单的测试用例中,我们在 C# ASHX 处理程序中添加了 C# 无限循环 (while(true){}),IIS 按预期终止了执行。

IIS 似乎没有考虑通过 [DllImport] 将非托管代码执行到其 executionTimeout 逻辑中。

这是设计使然吗?我们如何解决这个问题,让 IIS 终止执行?

中止非托管代码的唯一好方法是 运行 它在一个单独的进程中并使用 Process.Kill() 终止它。

由于您有非托管代码,因此必须将其放在 correctly implements IDisposable 的托管容器中。在容器内,您可以控制调用非托管方法的任务的生命周期,例如在一定的超时后杀死它。

所以目前我们实际上是通过检查违规线程是否消耗了太多资源来直接杀死违规线程(而不是进程)。