2013-05-16 2 views
1

Я использую однопользовательский класс SQLconnector с объектом блокировки. Мой вопрос заключается в том, что если несколько пользователей будут использовать этот класс в одно и то же время, это даст проблемы?Доступ нескольких пользователей singleton

FYI ... Singleton код

public sealed class SqlConnector 
{ 
    private static volatile SqlConnector instance; 
    private static object syncRoot = new Object(); 

    public static SqlConnector Instance 
    { 
    get 
    { 
     if (instance == null) 
     { 
      lock (syncRoot) 
      { 
       if (instance == null) 
       { 
        instance = new SqlConnector(); 
       } 
      } 
     } 
     return instance; 
     } 
    } 

    public Execute(...) 
    { 
    //what ever 
    } 
} 
+1

Мы понятия не имеем, так как мы не знаем, что это * в * синглтона. Я хотел бы указать, что есть более чистые подходы к реализации одноэлементного шаблона, в первую очередь. См. Http://csharpindepth.com/Articles/General/Singleton.aspx –

+0

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

+1

Это действительно не говорит нам о том, является ли класс по своей сути безопасный для использования из нескольких потоков. Например, если вы создаете новый 'SqlConnection' в каждом методе, это может быть хорошо, но если вы пытаетесь повторно использовать соединение, вам нужно быть более осторожным. –

ответ

0

Класс SqlConnector должен быть поточно-

+0

экземпляры экземпляров не являются потокобезопасными: http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.aspx (см. Раздел «Тема» Секция безопасности) – polkduran

1

Это не очень хорошая практика, чтобы использовать SqlConnector как Singleton. Пул соединений будет обрабатывать его для вас.

От http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.aspx:

Для развертывания высокопроизводительных приложений, вы должны использовать соединение пулы. Когда вы используете поставщик данных .NET Framework для SQL Server, , вам не нужно включать пул соединений, потому что провайдер управляет этим автоматически, хотя вы можете изменить некоторые настройки. Для дополнительную информацию см. В разделе Объединение пулов SQL Server (ADO.NET).

SQL Server Connection Pooling (ADO.NET)

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