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

本文关键字:超时 执行 NET -ASP 无限循环 | 更新日期: 2023-09-27 18:24:10

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

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

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

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

这是故意的吗?我们如何绕过这个问题,让IIS终止执行?

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

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

由于您有非托管代码,因此必须将其放入正确实现IDisposable的托管容器中。在容器中,您可以控制调用非托管方法的任务的生命周期,例如在某个超时后终止它。

因此,目前我们实际上通过检查有问题的线程是否消耗了太多资源来直接杀死该线程(而不是进程)。