Оставьте MySQL бездействующим для повторного использования или подключения по требованию, как насчет классов? - PullRequest
3 голосов
/ 16 июня 2011

В настоящее время я работаю над настольным приложением, использующим winforms и .NET 4.0, я скачал самый последний коннектор MySQL для .NET 4.0, но у меня есть несколько сомнений относительно того, что было бы лучшим способом его использовать.

ПРИМЕЧАНИЕ. Просто хочу указать, что это приложение предназначено для личного использования и будет работать на моем собственном сервере.

  • Мое приложение подключено к серверу, но не получает информацию ввсегда ли мне устанавливать соединения по требованию с MySQL для обработки полученных данных или оставить соединение с MySQL открытым до тех пор, пока приложение открыто на холостом ходу, чтобы его можно было повторно использовать при получении данных?

  • Я искал несколько более свежих документов, касающихся использования MySQL с c #, но все, что я смог найти, - это учебные пособия, выпущенные в 2006 году, - есть несколько хороших примеров, которые более свежие, которые я мог бы использовать в качестве ссылки(это мой первый раз, когда я использую MySQL с c #), особенно документы, показывающие, как сериализовать / десериализоватьДанные, использующие DataTable, были бы очень кстати?

    Я был бы счастлив с некоторыми примерами кода классов, которые вы, ребята, часто используете для установления соединения или получения данных из него.

  • Еще один вопросЯ думал о том, что не так связано с этим: Когда я должен рассмотреть возможность использования веб-API через прямые соединения MySQL с моим приложением?

1 Ответ

4 голосов
/ 16 июня 2011

На мой взгляд, вы должны открыть соединение в начале действия пользователя и закрыть его в конце. Это не окажет существенного влияния на производительность, поскольку подключение выполняется так же быстро, как и выполнение одного запроса.

Однако, если вы открываете / закрываете соединение для каждой подоперации, вы можете получить низкую производительность. Будьте уверены, что вы этого не делаете.


Основная мотивация для использования нового соединения каждый раз, что вы можете избежать следующих классов ошибок:

  • «Утренние» ошибки, когда база данных исчезала или отключалась через некоторое время (или время ожидания на брандмауэрах с сохранением состояния и т. Д.)
  • Ошибки «Stale state», когда какое-то предыдущее действие оставляло соединение в «разорванном» состоянии и приводило к сбою следующего действия или неожиданному поведению (например, «SET names koi8»)

Можно сбросить соединение mysql, выполнив mysql_change_user (если ваш API его поддерживает), но это почти то же самое, что и переподключение (просто используется то же самое соединение tcp).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...