1

ここで非常に奇妙なバグに直面していますが、それを解決するための正しい道をたどっているのか、それともどのように解決しているのかさえよくわかりません。

これが私が直面している問題です: log4net、NHibernate、LINQ to NHibernate を使用する WPF アプリケーションのデバッグを開始し、データベースからエンティティを取得しようとすると、アプリケーションと VS が長時間ハングし、その後しばらくすると、例外ダイアログが開き、ContextSwitchDeadlock MDA に関する次の情報を含むメッセージが表示されます。

CLR は、60 秒間、COM コンテキスト 0x34fc1a0 から COM コンテキスト 0x34fc258 に移行できませんでした。宛先コンテキスト/アパートメントを所有するスレッドは、非ポンピング待機を行っているか、Windows メッセージをポンピングせずに非常に長時間実行されている操作を処理している可能性があります。通常、この状況はパフォーマンスに悪影響を及ぼし、アプリケーションが応答しなくなったり、時間の経過とともにメモリ使用量が継続的に蓄積したりする可能性さえあります。これを避けるには

コード ファイルを新しいプロジェクトにコピーし、古いプロジェクトを削除して、構成に関係があると考えて、このメッセージを消すことができるかどうかを確認しました。何が原因なのかを確認するために一度にいくつか追加し始めました.log4net構成コードを含めると、バグが再び現れました. 最初に、AssemblyInfo を介してそれを含め、後でアプリケーションの起動時にコード構成を介して含めましたが、まったく何も変更されていません :(

だから、ここに私の発見があります:

  • log4netを使用している場合にのみ発生します。
  • これは、NHibernate がデータベースからエンティティをロードする (遅延ロード) ときに発生します。

このバグの原因が何であるかはわかりません。Visual Studio でのデバッグ時にのみ発生します。次のページの「MDA の有効化と無効化」セクションの手順に従ってみました: http://msdn.microsoft.com/en-us/library/d21c150d.aspx、VSそれでもハングし、メモリ使用量が増加します。

プログラムを通常実行すると、これは何も起こらないので、この質問が示唆するように、これはデッドロックの状況ではないと確信しています: contextswitchdeadlock (私はそこに投稿された解決策も試しました)。

そのため、log4net を無効にして、アプリをデプロイするときに再度有効にすることにしました。

この質問を投稿して、他の誰かがこのバグに直面したかどうか、または解決方法について提案があるかどうかを確認します。最後に、このまったく同じ問題に直面している他の誰かを助けるかもしれません.

4

1 に答える 1

2

DebugAppender を使用すると、データベース内のすべてのエンティティがロードされ、そのすべてのデータがデバッグ出力に書き込まれます。実行に 60 秒以上かかるため、ContextSwitchDeadlock MDA が発生していました。

DebugAppender を無効にすると、問題が解決しました。

ヒントをくれた Mauricio Scheffer に感謝します。

于 2010-05-25T18:14:42.453 に答える