2012-01-25 8 views
2

나는 여러 번 연결을 열고 닫으려고하는 간단한 C# 코드가 있습니다. 새 연결이 연결 풀에서 들어오고 데이터베이스에 연결되지 않도록하려면 어떻게합니까?C# 새 연결이 실제로 연결 풀에서 재사용되고 있는지 확인하는 방법

using System; 
using System.Data; 
using System.Data.Odbc; 
using System.Collections.Generic; 

namespace LBSService 
{ 
    class MyClass { 
     public static OdbcConnection connection = null;  
     public void TestConnection() 
     { 
      string connectionstring = @"Dsn=my_database.IServer;Host=IServer; 
             Database=my_database;Uid=informix; 
             [email protected]"; 

      for (int i = 1; i <= 50; i++) 
      { 
       string StrQuery = "select * from capture_files"; 
       connection = new OdbcConnection(connectionstring); 
       connection.Open(); 
       connection.Close(); 
      } 
     } 
    } 
} 

ODBC와 관련된 대답이 바람직하기 때문에 ODBC 연결을 열어야한다는 제한이 있습니다.

내 '연결'개체 또는 풀에 얼마나 많은 사용되지 않는 연결이 있는지, 내 응용 프로그램에서 사용되는 연결 수를 실제로 볼 수있는 데이터 멤버가 있습니까? 사전에

감사합니다 ...

답변

0
당신은 추가하고 연결 문자열을 제거하여 기능에 타이밍을 사용할 수 있습니다

이 :

Pooling=false; 

타이밍이 다를 경우 - 다음이 문자열없이 연결이

을 재사용 이처럼

:

public long TestConnection(bool usepooling) 
{ 
    string connectionstring = @"Dsn=my_database.IServer;Host=IServer; 
            Database=my_database;Uid=informix; 
            [email protected];Pooling="+usepooling.ToString; 


    Stopwatch sw = new Stopwatch(); 
    for (int i = 1; i <= 50; i++) 
    { 
    string StrQuery = "select * from capture_files"; 
    connection = new OdbcConnection(connectionstring); 
    sw.Start(); 
    connection.Open(); 
    connection.Close(); 
    sw.Stop(); 
    } 

    return sw.ElapsedMilliseconds; 

} 
3

약간 잘못된 논리이다

"나는 나의 새로운 연결이 연결 수영장에서 오는 것을하고 데이터베이스를 치는되지 않도록 할 수 있습니다 방법"을 참조하십시오. 연결 풀은 클라이언트 측에 있습니다. 풀에서 연결을 재사용하더라도 모든 명령이 여전히 데이터베이스에 도달해야합니다.

이있는 경우 정확히 동일한 연결 문자열 (심지어 경우에 아래로), 당신은 풀에서 연결을 다시 사용합니다 (기본값 인이 켜져있는 경우).

연결 풀이 존재하는 이유는 연결 설정에 약간의 오버 헤드가 필요하기 때문입니다.

SQL Server Connection Pooling

:

데이터베이스 서버에 연결은 일반적으로 여러 시간이 걸리는 단계로 구성됩니다. 소켓 또는 명명 된 파이프와 같은 실제 채널을 설정해야하며 서버와의 초기 핸드 셰이크는 이어야하며 연결 ​​문자열 정보는 구문 분석되어야하며 연결은 서버에서 인증되어야하며 에 대한 검사를 실행해야합니다 현재 트랜잭션에 참여하는 등의 작업을 수행합니다.

실제로 대부분의 응용 프로그램은 하나 또는 몇 가지 다른 연결을 사용합니다. . 즉, 응용 프로그램을 실행하는 동안 이 실행되면 많은 동일한 연결이 반복적으로 열리고 이 닫힙니다. 연결 열기 비용을 최소화하기 위해 ADO.NET에서는 연결 풀링이라는 최적화 기술을 사용합니다.

연결 풀링은 새 연결 을 열어야하는 횟수를 줄입니다. 풀러는 실제 연결의 소유권을 유지합니다.각 연결 구성에 대해 활성화 된 일련의 활성 연결을 유지하여 연결을 관리합니다. 사용자 이 연결에서 열기를 호출 할 때마다 풀러는 풀에서 사용 가능한 연결을 찾습니다. 풀링 된 연결을 사용할 수있는 경우 은 새 연결을 열지 않고 호출자에게 연결을 반환합니다. 응용 프로그램이 연결에서 Close를 호출하면 풀러는이를 풀지 않고 풀링 된 활성 연결 집합 에 반환합니다. 연결이 풀로 반환되면 다음 번 열기 호출 에서 다시 사용할 준비가되었습니다.

동일한 구성의 연결 만 풀링 할 수 있습니다. ADO.NET 은 각 구성마다 하나씩 여러 개의 풀을 동시에 유지합니다. 연결은 연결 문자열별로 풀로 구분되고 통합 보안이 사용되는 경우 Windows ID는 입니다. 연결은 트랜잭션에 참여했는지 여부에 따라 도 풀링됩니다.

1

당신은 한 번만 활성 데이터베이스 연결

이 있는지 확인하기 위해 ADO.net Performancecounters 볼 수 있습니다
관련 문제