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

时间:2015-11-25 08:27:25

标签: c# asp.net infinite-loop

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

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

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

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

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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