2009-12-20 2 views
1

응용 프로그램의 데이터 액세스 부분을 nhiberate에서 straight ado.net으로 바꾸면 성능이 향상됩니까?직선 ado.net과 ORM을 비교하면 성능이 향상됩니까?

NHibernate가 ado.net을 핵심으로 사용한다는 것을 알고 있습니다!

+1

코드가 컴파일되고 대부분의 코드가 최적화되어 NHibernate에서 순수한 NHibernate보다 더 효율적이며 직접 ado.net에서 얻은 성능에 매우 근접 할 수있는 다른 형식으로 변환됩니다. 그냥 생각. 감사! –

+1

아마도 데이터 판독기를 개체로 변환하기 위해 ADO.NET보다 약간의 작업을 수행하고 있기 때문에 대답하기가 거의 불가능합니다. NHibernate가 당신의 커스텀 코드보다 더 효율적 이냐 덜 효율적인지를 알기는 어렵다. – itowlson

답변

6

짧은 대답은 :

그것은 당신이 수행하는 작업의 종류에 따라 달라집니다. 당신이 좋은 SQL을 작성하는 경우 당신은 아마 성능 향상을 얻을 것입니다,하지만 당신은 캐싱

가 가

긴 대답 등 자 NHibernate를 잃고 있기 때문에 경우에 당신은 더 나쁜 성능을 얻을 수 있습니다

당신이 언급으로, NHibernate에가 앉아 ADO.NET의 최상위 계층이며 추상화 계층을 제공합니다. 이것은 당신의 삶을 여러면에서보다 쉽게 ​​만듭니다. 그러나 모든 추상화 계층에는 특정 성능 비용이 있습니다.

많은 항목을 업데이트하거나 많은 양의 항목을 가져 오는 것과 같이 많은 개체를 한꺼번에 조작 할 때 성능상의 이점이있는 주요 사례가 있습니다. 이는 NHibernate 세션이 수정 된 객체를 추적하기 위해 수행하는 작업 때문입니다. NHibernate의 성능은 세션의 엔티티 양이 커짐에 따라 크게 저하됩니다.

NHibernate는 성능을 향상시킬 수있는 많은 방법을 가지고 있으며 실제로 잘 알고 있다면 ADO.NET과 매우 비슷하게 수행 할 수 있습니다. 그러나 익숙하지 않은 분이라면 성능면에서 쉽게 발을 쏠 수 있습니다. (N + 1 문제 선택 등)

NHibernate 양식을 직선 ADO.NET으로 전환 할 때 실제로 성능이 저하 될 수있는 경우가 있습니다. 이것은 Hibernate 추상화 레이어가 캐싱과 같은 성능을 향상시킬 수있는 몇 가지 기능을 도입한다는 사실 때문입니다. NHibernate는 또한 현재 데이터베이스 관리 시스템을 위해 생성 된 SQL을 최적화하는 기능을 포함합니다. 예를 들어, SQL Server를 사용하는 경우 Oracle을 사용하는 경우와 약간 다른 SQL을 생성 할 수 있습니다.

모든 것이 든 아니든 상관 없다는 것을 언급 할 필요가 있습니다. 당신은 당신이 복잡한 쿼리, 일괄 삽입/업데이트 등을 수행하는 곳에서 10 %의 SQL에 대해 똑 바른 SQL을 사용할 수 있습니다.

관련 문제