通过引用的库检测100%的CPU负载

时间:2016-03-31 19:15:59

标签: c# dll process

我有一个ASP.NET(C#)网站,该网站使用第三方DLL处理用户通过网络表单发布的数据。这个电话很简单:

string result = ThirdPartyLib.ProcessData(myString);

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

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

C#中是否有办法检测此DLL何时开始占用100%CPU并从ASP.NET代码中自动终止进程?

1 个答案:

答案 0 :(得分:1)

您无法“检测”当前进程是否处于挂起状态,因为作为方法的调用方(第三方与否),在返回之前,您根本无法控制。

您可以做的是将第三方库的调用转移到单独的可执行文件中,并通过标准输出输出结果(您只需使用Console.WriteLine(string))。

完成后,您可以启动一个单独的Process运行此可执行文件,通过StandardOutput读取结果并使用WaitForExit(int)等待一段时间(也许几秒钟的过程完成。 WaitForExit()的返回值告诉您进程是否实际退出。如果它没有,你可以Kill()它继续前进而不会挂起IIS工作进程。