복붙노트

[SQL] 연결 풀링을 사용하는 동안 방법, 물리적으로 가까이에도록 SqlConnection을 강제로?

SQL

연결 풀링을 사용하는 동안 방법, 물리적으로 가까이에도록 SqlConnection을 강제로?

나는 SqlConnection 개체를 인스턴스화하는 경우, 정말 연결 풀에서 연결을 잡는하고 있음을 이해합니다. 나는 열기 ()를 호출 할 때, 그것은 연결을 엽니 다. 내가 그 SqlConnection 개체에 닫기 () 또는 폐기 () 메서드를 호출 할 경우, 연결 풀에 반환됩니다.

난 아직 데이터베이스에 활성 연결이있는 경우 그러나, 정말 정말 닫혀 있으면 말해, 또는하지 않습니다.

이 닫을 때 어떻게 네트워크 수준에서 닫으려면도록 SqlConnection을 강제로, 또는 적어도 텔에서 할 수 있습니까?

예:

using(SqlConnection conn = new SqlConnection(DBConnString)) {

   conn.Open();
   SqlCommand cmd = conn.CreateCommand();
   ...
   cmd.ExecuteReader(CommandBehavior.CloseConnection);
   ...
}

연결이 진정으로 종료 된 경우, 두 번째와 세 번째 실행은 300 밀리해야한다. 하지만 연결이 진정으로 그 실행을 위해 폐쇄되지 않는다는 것을 알고있다 (필자는 SQL 서버의 활동 모니터를 확인). 그것은 / 등 인증을 수행하기 위해 추가로 200 밀리을지지 않습니다.

어떻게 진정으로 가까운에 대한 연결을 강요하는 걸까?

아이디어

참조

해결법

  1. ==============================

    1.어쩌면 SqlConnection.ClearPool?

    어쩌면 SqlConnection.ClearPool?

  2. ==============================

    2.모에 Sisko의 대답 (전화 SqlConnection.ClearPool는) 올바른 것입니다.

    모에 Sisko의 대답 (전화 SqlConnection.ClearPool는) 올바른 것입니다.

    때때로 당신은 풀에 연결 정말 가까이보다는 수익을해야합니다. 예를 들어, 나는 모든 패스를 테스트하는 경우 다음 스크래치 데이터베이스 방울, 스크래치 데이터베이스를 생성 스키마를 기반으로, 몇 가지 물건을 테스트하는 단위 테스트가 있습니다.

    연결 풀링이 활성화되면, 드롭 데이터베이스 명령은 여전히 ​​활성 연결이 있기 때문에 실패합니다. 프로그래머의 관점에서 모든 SQLConnections은 폐쇄되어 있지만 수영장은 여전히 ​​열려 하나를 보유하고, SQL Server는 드롭을 허용하지 않습니다.

    연결 풀링 처리하는 방법에 대한 가장 좋은 문서는 MSDN의 SQL 서버 연결 풀링에이 페이지입니다. 하나는 반복이 열리고 닫히는과 성능을 향상 완전히 때문에 연결 풀링을 해제 할 수 없지만, 때때로 당신은 그래서 데이터베이스 놓아 것이라는하여 SQLConnection에 "강제 가까이"를 호출해야합니다.

    이것은 ClearPool으로 이루어집니다. 당신이 전에 SqlConnection.ClearPool (연결)를 호출하면 가까이 할 때 닫는 / 폐기 / 정말 멀리 갈 것입니다 폐기하십시오.

  3. ==============================

    3.연결 풀을 사용하지 않을 경우 당신은 당신의 SqlConnection.ConnectionString 속성에이를 지정해야합니다. 예를 들면

    연결 풀을 사용하지 않을 경우 당신은 당신의 SqlConnection.ConnectionString 속성에이를 지정해야합니다. 예를 들면

    "Data Source=MSSQL1;Database=AdventureWorks;Integrated Security=true;Pooling=false;"
    

    폐기 또는 SqlConnection 개체 그냥 연결을 닫고이 연결 풀에 반환하는 것입니다 닫는.

  4. ==============================

    4.일반적으로, 당신은 연결 풀은 일을 할 - 당신은 정말 가까운 연결을 원하지 않는다.

    일반적으로, 당신은 연결 풀은 일을 할 - 당신은 정말 가까운 연결을 원하지 않는다.

    왜 특별히이 연결 풀에 반환하지를 하시겠습니까?

  5. ==============================

    5.SqlConnection.ClearPool의 로버트의 대답 (TheSqlConn는) 내가 원하는 정확히 무엇을했다. 이 풀은 필요한 경우 상호 작용 할 수 있습니다 알고하는 것이 좋다.

    SqlConnection.ClearPool의 로버트의 대답 (TheSqlConn는) 내가 원하는 정확히 무엇을했다. 이 풀은 필요한 경우 상호 작용 할 수 있습니다 알고하는 것이 좋다.

    내 유스 케이스이었다 : 우리는 연결을 파괴하고 다음 사용자가 문제가되지 않습니다 그래서, 우리는 그것을 파괴 있다고 감지하고 새로 고침하는 방법 수영장, 다시 가자했다.

    이 솔루션은 있었다 : 풀 채우기 신선한 연결을 백업시키는, 우리가 연결을 파괴 한 것을 감지하고, 완전히 풀에서 선택을 취소합니다.

    SqlClient.SqlConnection와 I를 작성의 10 년 오늘날까지 풀과 상호 작용 생각하지 않았다.

  6. ==============================

    6.난 당신이 .NET을 사용하지만, 이것은 구글에서 가리 켰을 때, 나 자바 응답을 제공 할 수 있도록 쿼리 것을 볼 수 ...

    난 당신이 .NET을 사용하지만, 이것은 구글에서 가리 켰을 때, 나 자바 응답을 제공 할 수 있도록 쿼리 것을 볼 수 ...

    데이터 소스에서 데이터 소스가 구현 닫기 가능한 ()를 호출 가까이를 사용합니다. 히카리는 닫기 가능한을 지원합니다.

  7. ==============================

    7.위해 CommandBehavior.CloseConnection은 일반적으로 때문에 바로이 사실을 권장하지 않습니다 - 당신은 확실히 연결이 폐쇄됩니다 수 없습니다. (나는이 어떤 구체적인 증거를 찾기 위해 노력할 것이다, 나는 희미한 리콜에서 이런 말을 해요).

    위해 CommandBehavior.CloseConnection은 일반적으로 때문에 바로이 사실을 권장하지 않습니다 - 당신은 확실히 연결이 폐쇄됩니다 수 없습니다. (나는이 어떤 구체적인 증거를 찾기 위해 노력할 것이다, 나는 희미한 리콜에서 이런 말을 해요).

    이 암시 적으로 닫기를 호출하기 때문에 폐기 ()가 가장 확실한 방법이다 ().

    @ 알렉스에 의해 시연 사용하는 구조는 개체의 추가 암시 적 처리와 시도 - 마지막으로 구조를 작성하는 또 다른 (프로그래머 쉬운) 방법입니다.

    편집 : (질문에 대한 편집 후)

    실제로 닫는 연결을 통해 귀하의 관심은 나에게 부당한 것 같다. 이 모든 초기화를 통해 갈 필요없이 쉽게 재사용 할 수 있도록 연결은 단순히 풀에 반환합니다. 이 연결은 여전히 ​​적극적으로 DB에 연결되어있는 것을 의미하지 않는다.

  8. from https://stackoverflow.com/questions/1145892/how-to-force-a-sqlconnection-to-physically-close-while-using-connection-pooling by cc-by-sa and MIT license