2012-05-10 2 views
0

우리는 AspNet webapp에 OpenSessionInView 패턴과 함께 NHibernate를 사용하고 있습니다.OpenSessionInView 패턴, ADO 및 성능

ADO 연결 (SqlServer)을 사용하여 페이지에 액세스 할 때마다 다른 데이터베이스에 로그인하려고합니다. 이를 위해 모든 "페이지로드"마다 연결을 열어야하고, 삽입을 실행 한 다음 연결을 닫거나, 모든 요청간에 동일한 연결을 공유 할 수 있습니까?

잠금 및 동시 액세스는 어떻게됩니까? 이 데이터베이스에만 삽입합니다.

답변

1

네, 그럴거야 open --> insert --> close. 그 이유는 SQL 연결과 드라이버에 따라 대부분의 DB 연결이 풀링되므로 새로운 연결을 열면 실제로 풀에서 연결을 얻는 것이므로 비용이 저렴합니다. 수영장에서 연결이 끊어졌습니다.) 반면에 열린 커넥션을 유지한다면 모든 요청에 ​​대해이 커넥션 객체에 대한 액세스를 동기화해야하므로 동시성 문제가 발생할 수 있습니다. A 악몽, 즉. 실제로 이 (가) 요청을 차단하고 작업 속도를 상당히 늦출 수 있습니다.

다시 말해서 성능을 향상 시키지는 못합니다. 그 반대입니다. 앱을 복잡하게 만듭니다.