MySQL создает исключение NullReferenceException в Finalize ... Как вы справляетесь с этим? - PullRequest
2 голосов
/ 07 июня 2010

Я использую MySQL с соединителем .Net в 64-битной Windows. По какой-то причине Mysql создает исключение NullReferenceException в Finalize. Это проблема здесь , и кажется, что это связано с ошибкой, описанной здесь . Эта ошибка была обнаружена в 6.22, но у меня тоже возникает проблема с 6.23, так что, очевидно, она не исправлена.

Я использую MySQL как с вспомогательными классами, так и с помощью создания экземпляра соединения и объекта Mysqlcommand.

Кто-нибудь знает, какую часть моего кода мне нужно изменить, чтобы исправить эту проблему? Потому что, хотя это ошибка в Mysql, она не универсальна, потому что я не получаю проблему в других моих проектах. В отчете об ошибках MySQL также нет подробностей о том, как его воспроизвести.

Есть предложения?

Ответы [ 2 ]

1 голос
/ 07 июня 2010

Что сработало : я подозревал, что соединение MySQL не реализовало MySql-ридер так хорошо, как следовало бы, но я не был уверен. После ответа Evegeny я решил провести более глубокую проверку. Поэтому я установил демонстрационную версию этого потрясающего программного рефлектора pro и просверлил прямо в исходном коде MySQL Data Connector, и это действительно ошибка в MySQL Data Connector.

Избавьтесь от MySQL Helper для получения объектов MySqlDataReader, и все снова будет круто.

Спасибо, Евгений.

Подробнее здесь

1 голос
/ 07 июня 2010

Если вы вызываете Dispose на MySqlConnection (или заключаете его в using), то теоретически не следует вызывать финализатор, по крайней мере, если MySqlConnection реализован правильно.

Если вы делаете это, и он все еще называется, вам нужно взглянуть на исходный код и посмотреть, делает ли он что-нибудь полезное. Если нет, вы можете позвонить по номеру GC.SuppressFinalize(). Если это так, вы можете создать подкласс MySqlConnection, переопределить его метод Finalize() и проглотить исключение, выданное базовым методом. Очевидно, что оба эти подхода основные хаки и являются только обходными путями, а не исправлениями.

...