응용 프로그램의 데이터 액세스 부분을 nhiberate에서 straight ado.net으로 바꾸면 성능이 향상됩니까?직선 ado.net과 ORM을 비교하면 성능이 향상됩니까?
NHibernate가 ado.net을 핵심으로 사용한다는 것을 알고 있습니다!
응용 프로그램의 데이터 액세스 부분을 nhiberate에서 straight ado.net으로 바꾸면 성능이 향상됩니까?직선 ado.net과 ORM을 비교하면 성능이 향상됩니까?
NHibernate가 ado.net을 핵심으로 사용한다는 것을 알고 있습니다!
짧은 대답은 :
그것은 당신이 수행하는 작업의 종류에 따라 달라집니다. 당신이 좋은 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을 사용할 수 있습니다.
코드가 컴파일되고 대부분의 코드가 최적화되어 NHibernate에서 순수한 NHibernate보다 더 효율적이며 직접 ado.net에서 얻은 성능에 매우 근접 할 수있는 다른 형식으로 변환됩니다. 그냥 생각. 감사! –
아마도 데이터 판독기를 개체로 변환하기 위해 ADO.NET보다 약간의 작업을 수행하고 있기 때문에 대답하기가 거의 불가능합니다. NHibernate가 당신의 커스텀 코드보다 더 효율적 이냐 덜 효율적인지를 알기는 어렵다. – itowlson