1. ホーム
  2. c#

[解決済み] 保護されたメモリの読み取りまたは書き込みを試みました。これは、他のメモリが破損していることを示すことが多いです。

2022-01-31 11:15:34

質問

このエラーの原因について、どなたかご教示いただければと思います。

<ブロッククオート

保護されたメモリの読み取りまたは書き込みを試行しました。これは、他のメモリが破損していることを示すことがよくあります。

このエラーはアプリケーションの任意の場所で発生するようなので、実際にコードを掲載することはできません。アプリケーションは、エラーをスローする前に、12~48時間の範囲で実行されます。あるときは、一見ランダムな場所で停止して上記のエラーをスローしますが、別のときは、アプリケーション全体が停止して、"There was a fatal error in... というような内容のエラー画面が表示されることがあります。これはCLRのバグかもしれません..." PInvokeに関する何か、または他の関連性のない情報です。この問題が発生すると、すべてのスレッドが終了し、デバッグ情報が利用できなくなります。

簡単に言うと、このようなアプリケーションです。

C#で書かれたマルチスレッドサーバーアプリケーションです。クライアントは、ソケットを介してサーバーに接続します。サーバーはクライアントのために仮想環境(quot;environment")を実行し、クライアント同士や環境と対話することができる。サーバーはかなりの量のメモリを消費しますが、リークしている様子はありません。通常、約1.5GBを消費します。 アプリケーションを実行している間、メモリの使用量は比較的一定なので、リークしているとは思いません。クライアントが何もしていなくても、環境を維持するために常にコードを走らせています。サードパーティのソフトウェアや他のAPIは使用していません。このアプリケーションが使用する外部リソースは、ソケット接続とSQLデータベース接続のみです。64ビットサーバー上で動作しています。.net 2.0、3.5、4.0を使用して、複数のサーバー上でVS2008とVS2010でデバッグしてみましたが、問題はまだ最終的に発生します。

コンパイラの最適化をオフにしたり、いくつかのマイクロソフトのホットフィックスを試しました。この問題を解決することはできないようです。何か考えられる原因や、問題を引き起こしているものを特定する方法をご存知の方がいらっしゃいましたら、教えていただければ幸いです。

解決方法は?

WinDBGとSOSの助けを借りて、ようやくこの問題を突き止めました。 アクセス違反は未知のDLLによって投げられていたのです。Nvidia Network Manager"というソフトウェアが問題を引き起こしていることが判明しました。この問題がファイアウォールやアンチウイルスによって引き起こされる可能性があることを何度も読みましたが、私はどちらも使っていなかったので、この考えは捨てました。また、異なるハードウェアを使用した複数のサーバーで発生するため、環境によるものではないと仮定していました。私がテストしたすべてのマシンは、NVidia Network Managerを実行していることが判明しました。これは、マザーボードの他のドライバと一緒にインストールされると思います。

この問題は私のアプリケーションを非常に長い間苦しめていたので、これが誰かの助けになることを願っています。