2012-01-22 3 views
0

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

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

+0

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

ответ

1

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

как для вашего вопроса подключения:

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

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

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

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

UPDATE:

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

+0

Ну, я много читал о пуле соединений, но как я знаю, использует ли моя система их, MSDN говорит, что я уже использую пул соединений, потому что им используется oledb и oledb. «Поставщик данных .NET Framework для OLE DB автоматически объединяет соединения, используя пул соединений OLE DB», источник MSDN – Flob

+0

@Flob, если вы не изменили настройки по умолчанию для OleDB, они должны использовать их ... если вы хотите проверить, можете ли вы попробуйте проверить открытые сеансы на сервере БД (например, через SQL Server Management Studio). – Yahia

1

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

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

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

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

+0

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

+0

Да, вы правильно поняли. Не будет никаких преимуществ при работе для открытия соединения или использования одного и того же объекта для открытия соединения. –

+0

@HarisHasan, что просто неправильно ... наличие открытого соединения, готового к повторному использованию, является плюсом в отношении производительности ... – Yahia

Смежные вопросы