Могут ли возникать проблемы при использовании Singleton SQLConnection в однопользовательском приложении .NET для настольных ПК? - PullRequest
0 голосов
/ 22 октября 2018

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

Приложение использует подход Singleton для установления SQLConnection, и яХотите знать, может ли создание и удержание открытого экземпляра SQLConnection в памяти вызвать проблемы в этом контексте?

Я знаю, что пул соединений делает этот код избыточным .Что я хочу знать: учитывая мой сценарий каждого экземпляра однопоточного настольного приложения с одним пользователем, может , такой подход вызывает проблемы?

private static SqlConnection connection;

public static SqlConnection Connection
{
    get
    {
        if (connection == null) {
            connection = new SqlConnection();
            connection.ConnectionString = "...";
            connection.Open();
        }
        if (connection.State != ConnectionState.Open) {
            connection.Open();
        }
        return connection;
    }
}

Редактировать# 1 : я знаю, что это не лучшая практика;Я знаю, что соединения должны быть открыты поздно и закрыты рано;Я знаю, что пул соединений делает этот код избыточным.В моем конкретном случае проблема очевидна?

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Использование Singleton для объекта SqlConnection - действительно очень плохая идея.Нет никаких причин делать это вообще.

Если вы пытаетесь избежать снижения производительности "new SqlConnection ()" или "connection.Open ()", имейте в виду, что на самом деле никакого снижения производительности там нет, потому чтоза пул соединений происходит за кулисами.Connection Pooling обрабатывает открытие / закрытие дорогих соединений.Не объект SqlConnection.

Вы не сможете одновременно открывать несколько SqlDataReaders / Commands с соединением и столкнетесь с проблемами блокировки потоков, если вы попытаетесь использовать один и тот же объект соединенияс несколькими потоками.

Шаблон синглтона является наиболее часто используемым и злоупотребляемым шаблоном, и есть много побочных эффектов синглтона, о которых вы можете не знать.Очень хорошие разговоры об опасности синглетонов здесь http://www.youtube.com/watch?v=-FRm3VPhseI

0 голосов
/ 22 октября 2018

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

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

учитывать, что даже если соединение остается открытым дольше, само соединение является только каналом, поэтому большая часть зависит от того, как вы используете его сОбъекты Command и Reader, которые, по возможности, следует в любом случае закрыть и утилизировать, как только они больше не нужны.

Если в базе данных заблокировано несколько таблиц, это не происходит из-за того, что несколько пользователей пытаются получить доступ кодни и те же объекты одновременно?

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