Sql 서버 데이터베이스 연결 을 매번 열 어야 합 니까?

2137 단어 C#.NET
책 에 서 는 데이터 베 이 스 를 실행 할 때 먼저 데이터 베 이 스 를 연결 한 다음 에 데이터 베 이 스 를 실행 하고 마지막 으로 데이터 베 이 스 를 닫 아야 한다 고 알려 주 었 다.
asp 와 phop 프로 그래 밍 을 사용 할 때 모두 이렇게 처리 합 니 다.
나중에 자바+hibenate+my sql 을 사용 하여 hibenate 를 통 해 연결 풀 을 설정 합 니 다.
new HibernateEntityLoader().getSession()을 직접 통과 할 수 있 습 니 다.데이터베이스 연결 을 얻 었 습 니 다.연결 효율 이나 문제 가 있 는 지 고려 하지 않 았 습 니 다.
이전에.Net 으로 C/S 구 조 를 쓴 프로그램 은 클 라 이언 트 가 데이터 베 이 스 를 직접 연결 했다.선배 가 나 에 게 SqlConnection 은 매번 열 필요 가 없고 계속 열 수 있 으 며 마지막 에 닫 을 수 있다 고 말 했다.
나 는 매번 데이터 베 이 스 를 조작 하고 문 을 열 고 닫 는 것 이 귀 찮 지 않 겠 느 냐 고 느 꼈 다.그래서 이런 방식 을 채택 했다.
최근 에는 서버 쪽 을 쓰 고 웹 서비스 방식 을 사용 하여 클 라 이언 트 가 데이터 베 이 스 를 직접 연결 하지 않 습 니 다.
테스트 할 때 DataReader 가 닫 히 지 않 은 오 류 를 발 견 했 습 니 다.SqlDataReader 를 사용 하지 않 았 지만 오류 가 발생 했 습 니 다.데이터베이스 연결 이 부족 할 것 같 습 니 다.충돌 이 야?더 중요 한 것 은 일정 시간 간격 으로 클 라 이언 트 가 로그 인 할 수 없습니다.연결 이 초기 화 되 지 않 았 음 을 표시 합 니 다.비록 저 는 10 분 마다 데이터베이스 연결 을 활성화 하지만.
그래서 10 개의 정적 데이터베이스 연결 을 추 가 했 습 니 다.매번 에 Open 상태의 연결 을 무 작위 로 가 져 왔 습 니 다.그 결과 이번 클 라 이언 트 가 잘못 보 고 했 습 니 다.클 라 이언 트 방문 에 따라 얻 은 SessionID 가 다 르 지만 돌아 오 는 DataTable 이 연결 되 어 있 고 다른 클 라 이언 트 가 돌아 온 데 이 터 는 다른 클 라 이언 트 로 갑 니 다.
그래서 어 쩔 수 없 이 오픈 과 Close 를 솔직하게 사용 할 수 밖 에 없 었 다.그러나 매번 Open 과 Close 가 효율 에 영향 을 미 치 는 지 의문 이다.
오늘 테스트 를 했 는데 순환 이 완료 되 었 고 첫 번 째 시간 차 이 는 177 밀리초 였 으 나 모두 89 밀리초 로 유지 되 었 다.이제 안심 하 세 요.정말 한 네티즌 의 말 에 들 어 맞 았 습 니 다.Sql Server 는 그렇게 멍청 하지 않 습 니 다.그 는 자신의 연결 탱크 를 잘 관리 할 것 입 니 다.
            //            
            string connString = "Data Source=127.0.0.1;Initial Catalog=dbname;Integrated Security=False;User Id=it;Password=it";
            DateTime startDate = DateTime.Now;
            for (int i = 0; i < 10000; i++)
            {
                SqlConnection conn = new SqlConnection();
                conn.ConnectionString = connString;
                conn.Open();
                SqlCommand comd = new SqlCommand();
                comd.Connection = conn;
                comd.CommandText = "select getDate()";
                comd = null;
                conn.Close();
            }
            Console.WriteLine(DateTime.Now - startDate);

좋은 웹페이지 즐겨찾기