2011-08-16 11 views
1

現在、データを記録するアプリケーションをプログラミングしています。データはクラスタ化されてファイルに保存されます。.NETプログラムが突然終了する

このデータは、ユーザーまたはデータを表示するプログラムによって分析することができます。大量のデータを分析することにより、プログラムは突然終了する。すなわち、例外はなく、他のエラーメッセージ、またはタスクマネージャのプロセスがない。

perfmonでプログラムを解析すると、予想通りこの時点で多くのI/O(460イベント/秒と15MB /秒)が見つかりました。ファイルの別の場所からデータを読み取る際に制限がありますか? (私はポジションを探しており、完全なクラスターを読んでいます)。

+3

Therreは問題が多い可能性があります。通常、処理されない例外が発生したときにランタイムはアプリケーションイベントログに書き込みを試みます(可能な場合には、それが維持されていないか、メモリ例外)。あなたはより多くの情報を与えるエントリを見つけることができます。また、処理されていない例外をログに記録するために、AppDomain.CurrentDomain.UnhandledExceptionsのログとイベントハンドラを追加することをお勧めします。 –

+1

@Framil - これはマルチスレッドプログラムですか?バックグラウンドスレッドで未処理の例外が発生した場合、.NETはプロセスを終了させます。いくつかのtry..catを取得し、何が起こるかを見てください。 – Paolo

答えて

1

try..catchでコードをラップしていることを確認してください。次に、キャッチ内にブレークポイントを設定します。 (@Paoloは良い点を作っていますが、作業を行っているスレッドにtry..catchがあることを確認してください。)また、すべての例外を回避するためにvisual studioを設定することもできます。 "デバッグ"/"例外" /関連する "スロー"チェックボックスを選択します。

また、イベントビューアでいくつかのヒントを確認してみてください。

は最後に、あなたはまた、特定の場所にDebug.WriteLineまたはTrace.WriteLineを行う(ESP/OのVisual Studioワットシステム上で実行している場合)とSysinternals DebugView

注意して出力を監視することができます:コードの生成を行うようにしてください問題の原因を突き止めている間に、(つまり、ログを追加し、防御的にプログラムを追加するなど)

+2

デバッグをアタッチしないでプログラムを実行するか、ブレークポイントを設定しない場合でも、例外の詳細がレコーダーとなるようにログを記録する方がよいでしょう。 –

+0

Thx @Davide。うん。それは生産品質のコードです。問題の底に到達するのを手伝うためのテクニックを提供しようとしています。 – Jason

0

try..catchを使用します。

AppDomain.CurrentDomain.UnhandledExceptionsを購読してください。

NLogを使用してください。

プロセスの作業セットを見てください。

関連する問題