лучший способ справиться с oledbconnections - PullRequest
0 голосов
/ 22 января 2012

Из поиска переполнения стека и других сайтов я узнал, что синглтон - плохая практика программирования.Я в значительной степени полагаюсь на OleDbConnection для подключения к SqlServer, у меня есть страницы, которые могут создавать экземпляры, как 20+ раз соединение.Я хотел заменить это на одноэлементный, чтобы избежать открытия соединений, когда соединение уже открыто.

Мои вопросы: Синглтон в моем случае плох?Каков наилучший способ достижения нескольких соединений на сервере SQL Server 2008?

Ответы [ 2 ]

1 голос
/ 22 января 2012

то, что вы описываете, не имеет ничего общего с синглтоном ... сам по себе синглтон не является ни плохим, ни хорошим - только при неправильном использовании он плох (как и все).

что касается проблемы с вашим соединением:

Эта ситуация обычно решается / обрабатывается через пул соединений ...

Вы можете реализовать это самостоятельно (не рекомендуется) ... в зависимости от того, какой поставщик ADO.NET вы используете, он может уже иметь хорошо реализованный и хорошо протестированный пул соединений (например, от Devart - не аффилированный, просто счастливый клиент) ...

Пулы соединений обеспечивают своего рода кеш для соединений с БД ... когда вам нужен тот, который вы получаете из пула, когда вы закончите, вы возвращаете его в пул ... пул поддерживает соединения (в течение некоторого настраиваемого времени период с момента последнего использования или аналогичный) ... так как соединения в пуле уже созданы и открыты, вы получаете значительное преимущество в скорости ...

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

UPDATE:

OleDB поставляется со встроенным механизмом пула соединений - подробности см. MSDN . В соответствии с MSDN оно включено по умолчанию ... при закрытии / удалении соединения оно будет автоматически возвращено в пул ... что, в свою очередь, означает, что в вашей ситуации вы, возможно, уже используете механизм объединения (при условии, что вы используете настройки по умолчанию для OleDB).

1 голос
/ 22 января 2012

Singleton - неправильный выбор в вашем случае, потому что рекомендуется закрывать соединение, как только вы закончите с транзакцией базы данных. Даже если вам часто требуется соединение с базой данных, вы должны открывать соединение всякий раз, когда вам нужно, и закрывать это как можно скорее.

Кроме этого, Синглтон совсем не плохая практика программирования. Синглтон - это широко используемый шаблон в программировании. Ни один шаблон не является плохой практикой программирования. Просто вы должны использовать их в сценарии, в котором они вписываются и имеют смысл. Если вы будете использовать шаблон в неподходящем сценарии, это будет плохой практикой программирования.

Редактировать

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

...