0

私はwinformsを使用してVisualC#でアプリケーションを開発しています。

アプリケーションは基本的に3つのタブを持つ画面です。これは、システムで1秒あたりに実行されているプロセスからの値を示します(を使用System.Diagnostics.Process[])。

多くの数値と計算を生成および更新します(約4000 /秒)。しかし、10000回の反復または約45分の作業の後、クラッシュするだけで、驚くべき部分は常にほぼ同時にクラッシュすることです。

ここに含まれるRAMはわずか70MBであり、WindowsXPおよびWindows7のアプリのCPU負荷が35%を超えることはありません。アプリの目的は、ユーザーがcpuloadおよびメモリ負荷のあるシステムで実行されているプロセスを表示できるようにすることです。セキュリティ上の理由から、タスクマネージャーを提案することはできません。

try - catchエラーは、どの方法でもC#によってトラップされません

次の画面は、クラッシュ後に続くサンプルです

ここに画像の説明を入力してください

アプリケーションのメイン画面は次のようになります

ここに画像の説明を入力してください

一定のランレングスの後にアプリがクラッシュするような状況に直面した人はいますか?

そのようなエラーをトラップするための診断ツールまたは方法を提案してください。

返信ありがとうございます

4

2 に答える 2

4

このマシンにVisualStudioがインストールされている場合は、アプリケーションがクラッシュしたときにデバッグできるはずです。少なくとも、どの例外がどこでスローされるかを確認する必要があります。

私のアプリケーションには、キャッチされていない例外をキャッチしてログファイルに書き込むハンドラーがあります。

コンストラクターに追加

AppDomain currDomain = AppDomain.CurrentDomain;
currDomain.UnhandledException += new UnhandledExceptionEventHandler(UnhandledExHandler);

このハンドラーも追加します

private void UnhandledExHandler(object sender, UnhandledExceptionEventArgs args)
{
    Exception e = (Exception)args.ExceptionObject;
    // Log the exception here
}
于 2012-07-20T06:27:05.083 に答える
4

これをメインボイドのサービスに追加してみてください

AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;

        public static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
        {
            // do your logging here, write to a file, or send an email
        }

service.ExceptionThrown += service_ExceptionThrown;

        private static void service_ExceptionThrown(object sender, ExceptionThrownEventArgs e)
        {
            // do your logging here, write to a file, or send an email
        }

Visual Studioでサービスをデバッグする場合は、コマンドライン引数にスタートアップオプションで-dを追加するだけです。

コマンドライン引数

于 2012-07-20T06:27:52.927 に答える