2016-03-31 12 views
1

私は、サードパーティDLLを使用してユーザーがWebフォーム経由でPOSTしたデータを処理するASP.NET(C#)Webサイトを持っています。呼び出しはかなり簡単です。(私のホスティングプロバイダのログによる)参照されたライブラリによってCPU負荷が100%検出されました

string result = ThirdPartyLib.ProcessData(myString); 

一度ブルームーンでこのライブラリがハングアップし、CPUの100%を消費します。このWebサイトは共有ホスティングでホストされているため、IISまたはイベントログへのアクセス権はありません。これが起こると、私のウェブサイトはホスティングプロバイダのパフォーマンスモニタによって自動的に停止され、私は手動でそれを元に戻します。

今、正しいことが問題を調査し、DLLを修正(または置き換え)することがわかっています。しかし、それはサードパーティのソフトウェアであるため、私はそれを修正するのが難しく、彼らのサポートはまったく役に立たない。また、私は問題を再現できません。ライブラリの交換も苦痛です。

このDLLが100%CPUを使い始め、ASP.NETコードからプロセスを自動的に終了させる方法をC#で検出する方法はありますか?

+0

は 'ThirdPartLib.ProcessData(myString)'です。メソッド/クラスのシグネチャはパブリッククラスかスタティッククラスかを知っていますか?あなたはサードパーティのデバッグ/コードを修正することができますか? 3パートクラスオブジェクトのインスタンスをどのように消費/インスタンス化しているかを示すことができますか? – MethodMan

+0

@MethodMan、 'それはパブリッククラスか静的なクラスなのですか?'これは、パラメータのない単一のctorと私が呼び出す必要のある単一のメソッドを持つpublic非staticクラスです。 '問題が解決されているか' libはIDisposableクラスを公開していません。 「第三者にコードをデバッグ/修正することはできますか?」答えは「はい」よりも「いいえ」に近い。私が修正を得ることができれば、私は明らかにそれを使用するでしょう。 「インスタンスを消費/インスタンス化する方法を示すことはできますか?」何も表示されません。 libのpublicメソッドは明白であり、それらを誤って使用する方法はありません。 –

答えて

1

現在のプロセスがハングしている場合は、メソッドの呼び出し元(サードパーティーかどうか)が戻ってくるまで制御できないため、「検出」できません。

あなたができることは、サードパーティのライブラリへの呼び出しを別の実行可能ファイルに移動し、その結果を標準出力から出力することです(これには単にConsole.WriteLine(string)を使用できます)。あなたはそれをやった後は

、あなたはこの実行ファイルを実行し、別Processを開始することができ、StandardOutput経由で結果を読んで、プロセスが終了するのを一定時間(多分数秒)待つようにWaitForExit(int)を使用しています。 WaitForExit()の戻り値は、プロセスが実際に終了したかどうかを示します。その場合は、Kill()を実行して、IISワーカープロセスが全体としてハングしないようにすることができます。