2013-05-16 3 views
1

lock 객체와 함께 SQLconnector 싱글 톤 클래스를 사용하고 있습니다. 내 질문은 이제 여러 사용자가이 클래스를 동시에 사용하면 문제가 발생합니까? 참고로 여러 사용자가 싱글 톤에 액세스

... 싱글 코드

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는 싱글로 SqlConnector를 사용하는 아주 좋은 방법이 아닙니다 스레드 안전

+0

인스턴스 멤버는 스레드로부터 안전하지 않습니다. http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.aspx (Thread 안전 섹션) – polkduran

1

해야한다. 연결 풀링이이를 처리합니다.

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

고성능 응용 프로그램을 배포하려면, 당신은 연결 풀링을 사용해야합니다. SQL Server 용 .NET Framework 데이터 공급자를 사용하는 경우 일부 설정을 수정할 수는 있지만 공급자 이 자동으로 관리하므로 연결 풀링을 사용할 필요가 없습니다. 자세한 내용은 SQL Server 연결 풀링 (ADO.NET)을 참조하십시오.

SQL Server Connection Pooling (ADO.NET)

관련 문제