检测到引用库的 100% CPU 加载

Detect 100% CPU load by a referenced library

我有一个 ASP.NET (C#) 网站,该网站使用第三方 DLL 来处理用户 POST 通过 Web 表单提供的数据。调用非常简单:

string result = ThirdPartyLib.ProcessData(myString);

此库挂起并(根据我的托管服务提供商日志)消耗了 100% 的 CPU。该网站托管在共享主机上,因此我无权访问 IIS 或事件日志。发生这种情况时,托管服务提供商性能监视器会自动停止我的网站,我已手动将其重新打开。

现在,我知道正确的做法是调查问题并修复(或替换)DLL。但由于它是第三方软件,我无法修复它,而且他们的支持根本没有帮助。而且,我无法重现该问题。换库也很痛苦

C# 中有没有一种方法可以检测此 DLL 何时开始消耗 100%CPU 并从我的 ASP.NET 代码中自动终止进程?

如果当前进程挂起,你不能 "detect" 因为作为方法的调用者(第三方或非第三方)你根本无法控制它 returns.

你可以做的是将对第三方库的调用移动到一个单独的可执行文件中,并让它通过标准输出输出结果(为此你可以简单地使用 Console.WriteLine(string))。

完成后,您可以启动一个单独的 Process that runs this executable, read the result via StandardOutput and use WaitForExit(int) to wait a certain amount of time (maybe a few seconds) for the process to finish. The return value of WaitForExit() tells you if the process actually exited. In case it didn't, you can Kill() 它并继续前进,而不会将 IIS 工作进程作为一个整体挂起。