2012-01-22 6 views
0

나는 스택 오버 플로우와 싱글 톤이 나쁜 프로그래밍 습관 인 다른 사이트를 검색하여 배웠다. SqlServer에 연결하기 위해 OleDbConnection에 많이 의존하고 있습니다. 20 회 이상의 연결을 인스턴스화 할 수있는 페이지가 있습니다. 난 이미 연결이 열렸을 때 연결을 열지 않도록 싱글 톤으로 바꾸고 싶다.oledbconnections을 처리하는 가장 좋은 방법

내 질문은 다음과 같습니다. 내 경우에 싱글턴이 나쁜가요? SQL Server 2008에서 여러 연결을 수행하는 가장 좋은 방법은 무엇입니까?

+0

싱글 톤 토론에 참여하지는 않지만 싱글 톤에 정적 변수를 사용하는 경우 페이지의 나머지 부분과 공유 될뿐만 아니라 실행중인 다른 페이지와도 공유됩니다. 동일한 응용 프로그램 풀 그것은 일을 복잡하게 할 것입니다. –

답변

1

싱글 톤과는 아무 관련이 없습니다 ... 싱글 톤 자체는 나쁘지도 좋지도 않습니다. 그것은 (모든 것과 같이) 나쁘다. 연결 문제에 대한 같은

:

이 상황은 보통 해결

/연결 풀을 통해 처리 ...

당신은 자신이 (권장하지 않음) 것을 구현할 수있다합니다 ... ADO.NET에 따라 공급자는 잘 구현되고 잘 테스트 된 연결 풀 (예 : Devart의 것 - 관련이없는 고객, 행복한 고객)과 함께 제공 될 수 있습니다. ...

연결 풀은 DB에 대한 일종의 캐시를 제공합니다 연결 ... 당신이 수영장에서 그것을 얻을 필요가있을 때, 당신이 끝내면 당신은 수영장으로 돌아갑니다 ... th e 풀은 연결을 유지합니다 (마지막 사용 이후 유사하게 구성 가능한 기간 동안) ... 풀의 연결이 이미 만들어져 열려 있기 때문에 상당한 속도 이점을 얻을 수 있습니다.

OTOH 당신이 사용하는 다른 로그인 및/또는 연결 설정을 사용하여 연결하는 경우 연결 풀 ...에서 이익

UPDATE :

인 OleDB 함께 제공은 내장 된 연결 풀링 메커니즘 - 자세한 내용은 MSDN를 참조하십시오. MSDN에 따르면 기본적으로 활성화되어 있습니다 ... 연결을 닫으면 자동으로 풀로 반환됩니다 ... 이는 풀링 메커니즘을 사용하고있는 상황을 의미합니다. OleDB의 기본 설정).

+0

글쎄, 연결 풀링에 대해 많이 읽었지 만, 실제로 시스템에서 사용하고 있는지 어떻게 알 수 있습니까? MSDN에서는 oledb와 oledb를 사용하고 있기 때문에 이미 연결 풀링을 사용하고 있다고 말합니다. "OLE DB 세션 풀링을 사용하여 OLE DB 용 .NET Framework 데이터 공급자가 자동으로 연결 풀"원본 MSDN – Flob

+0

@Flob OleDB의 기본 설정을 변경하지 않은 경우이를 사용해야합니다 ... 확인할 수 있는지 확인하려면 SQL Server Management Studio를 통해 DB 서버에서 열린 세션을 확인하십시오. – Yahia

1

싱글 턴은 데이터베이스 트랜잭션이 완료되는 즉시 연결을 닫는 것이 좋습니다. 데이터베이스 연결이 자주 필요한 경우에도 필요할 때마다 연결을 열어야합니다. 가능한 한 빨리 닫으십시오.

그 외의 경우 Singleton은 전혀 나쁜 프로그래밍 습관이 아닙니다. 싱글 톤은 프로그래밍에서 널리 사용되는 패턴입니다. 어떤 패턴도 나쁜 프로그래밍 실습이 아닙니다. 그들이 적합하고 완벽하게 이해할 수있는 시나리오에서 사용해야한다는 것입니다. 부적절한 시나리오에서 패턴을 사용하면 나쁜 프로그래밍 습관이됩니다.

편집

그냥 명확하게하기 위해, 내 의견으로는, 엄지 손가락의 규칙은 미래의 작업에 대한 열린 연결을 유지하지 않도록해야한다. 보류중인 트랜잭션이있는 경우 분명히 동일한 연결을 사용하여 모든 트랜잭션을 실행하는 것이 가장 좋습니다. 하지만 나중에 다시해야 할 일을 위해 연결을 열어 두어서는 안됩니다.

+0

그 대답은 첫 번째 질문, 나는 꽤 확신했다 내 경우에는 싱글 톤 옵션이 아닙니다. 당신은 내가 모든 요청에 ​​연결을 열거 나 닫아야 만한다는 말을하고 있습니까? – Flob

+0

예, 올바르게 이해했습니다. 연결을 열어 두거나 동일한 객체를 사용하여 연결을 유지하는 데 따른 성능상의 이점은 없습니다. –

+0

@HarisHasan은 틀린 것입니다 ... 재사용을 위해 열린 연결을 갖는 것은 성능에 관한 플러스입니다. – Yahia

관련 문제