終了後もC#コンソールアプリケーションがメモリに常駐する
-
03-07-2019 - |
質問
.net C#コンソールアプリケーション(サービスではない)があります。基本的にWebサービスに接続し、いくつかのxmlファイルを取得し、それらのファイルをドライブ上のいくつかの場所にコピーし、xmlを検証し、処理して、これらのオブジェクトを別のWebサービスに送信します。
ただし、mainメソッドが存在する(およびコンソールウィンドウが閉じる)場合、タスクマネージャーでプロセスを確認できます。
ApplicationExceptionをキャッチするために、メインメソッドのすべてをtryで囲みましたが、それ以外の場合はすべてがスムーズに動作するにもかかわらず、アプリがクラッシュする理由については何も得られませんでした...
誰が不良部品のチェックを開始するかについての手掛かりを持っていますか?
解決
スレッドの使用と非同期呼び出しを確認してください。
他のヒント
コンソールウィンドウが閉じている場合、プロセスがまだ実行されていることは非常に奇妙に見えます。 Visual Studioデバッガーでアタッチできますか? (明らかにデバッグビルドです。)
まだ実行中の前の実行ではないのですか?
アプリをデバッグしている場合、Visual Studioがアプリに似た名前のホストexeを作成し、最後に.vshost.exeが付いている状況を見ました。デバッグエクスペリエンスを向上させるためにアプリを制御するために使用します。このホストexeは、プログラムのデバッグが終了した後も待機しているため、新しいデバッグセッションをすばやく開始できます。
ぶらぶらしているのはこのexeではないのですか?
デバッグせずにアプリケーションを実行した場合、それでもハングアップしますか?
アプリケーションには、ほぼ確実に終了していないスレッドがあります。 Jonが言ったように、デバッガーに接続して、どのスレッドが生きているかを確認します。
他のすべての答えが示唆しているように、おそらく長引くスレッドがありますが、必ずしも明示的に作成したスレッドではないため、1つ以上のオブジェクトでDisposeまたは類似のものを呼び出す必要があります