2

64ビットWindowsで.Netコネクタを使用してMySQLを使用しています。何らかの理由で、MysqlはFinalizeでNullReferenceExceptionをスローしています。これはここでの問題であり、ここで説明されているバグが原因のようです。このバグは6.22で報告されましたが、6.23でも問題が発生しているため、修正されていないようです。

ヘルパークラスと、接続とMysqlcommandオブジェクトをインスタンス化することの両方でMySQLを使用しています。

この問題を修正するためにコードのどの部分を変更する必要があるか、誰かが知っていますか?これはMysqlのバグですが、他のプロジェクトでは問題が発生しないため、これは普遍的ではありません。MySQLのバグレポートには、それを再現する方法についての詳細もありません。

助言がありますか?

4

2 に答える 2

1

何がうまくいったか:MySQL接続がMySqlリーダーを適切に実装していないのではないかと疑っていましたが、よくわかりませんでした。Evegeny の回答の後、私はより深いチェックを行うことにしました。そこで私は、そのすばらしいソフトウェア Reflector Pro のデモ版をインストールし、MySQL Data Connector のソース コードを掘り下げました。これは実際、MySQL Data Connector のバグです。

MySqlDataReader オブジェクトを取得するための MySQL Helper を取り除くと、再びクールになります。

ありがとうエフゲニー。

詳細はこちら

于 2010-06-07T06:15:40.090 に答える
1

を呼び出す(または でラップするDispose)場合、少なくとも適切に実装されていれば、理論的にはファイナライザーを呼び出すべきではありません。MySqlConnectionusingMySqlConnection

それを行っていて、まだ呼び出されている場合は、ソースコードを見て、何か役に立つかどうかを確認する必要があります。そうでない場合は、それを呼び出すことができますGC.SuppressFinalize()。そうであれば、 をサブクラス化MySqlConnectionし、そのメソッドをオーバーライドしFinalize()て、基本メソッドによってスローされた例外を飲み込むことができます。明らかに、これらのアプローチはどちらも主要なハックであり、単なる回避策であり、修正ではありません.

于 2010-06-07T05:01:42.110 に答える