2009-12-20 3 views
1

aurais-je des gains de performance si je remplace ma partie d'accès aux données de l'application de nhiberate à straight ado.net? Je sais que NHibernate utilise ado.net en son cœur!Gains de performance en utilisant straight ado.net vs un ORM?

+1

Je ne dirais pas grand-chose, quand votre code compile la plus grande partie du code optimisé et converti de NHibernate vers une autre forme qui sera évidemment plus efficace que la pure NHibernate et pourrait être très proche du gain de performance donné par ado.net direct. Juste une pensée. Merci! –

+1

Il est presque impossible de répondre à cette question car il est probable que vous fassiez du travail au-dessus d'ADO.NET pour traduire les lecteurs de données en objets. Il est difficile de savoir si NHibernate fera ce travail plus ou moins efficacement que votre code personnalisé. – itowlson

Répondre

6

Réponse courte:

Cela dépend de ce type d'opérations que vous effectuez. Vous auriez probablement obtenir une amélioration de la performance si vous écrivez bien SQL, mais dans certains cas, vous pouvez obtenir des performances pire puisque vous perdez la NHibernate mise en cache, etc.

Réponse longue:

Comme vous le mentionnez, NHibernate est assis sur sommet d'ADO.NET et fournit une couche d'abstraction. Cela rend votre vie plus facile à bien des égards, mais comme toutes les couches d'abstraction, elle a un certain coût de performance. Le principal cas où vous verriez probablement un avantage en termes de performances est lorsque vous travaillez sur plusieurs objets à la fois, par exemple en mettant à jour de nombreuses entités ou en récupérant un grand nombre d'entités. Cela est dû au travail effectué par la session NHibernate pour suivre quels objets sont modifiés, etc. Mon expérience est que les performances de NHibernate se dégradent de manière significative à mesure que le nombre d'entités augmente dans la session. NHibernate a beaucoup de façons d'améliorer les performances et si vous le savez vraiment bien, vous pouvez obtenir des performances assez proches d'ADO.NET. Cependant, si vous n'êtes pas familier avec cela, vous pouvez facilement vous tirer dans le pied, en termes de performance. (Sélectionnez le problème N + 1, etc.)

Dans certaines situations, vous pourriez obtenir de moins bonnes performances lors du changement de forme de NHibernate en ADO.NET direct. Cela est dû au fait que la couche d'abstraction NHibernate introduit certaines fonctionnalités qui peuvent améliorer les performances, telles que la mise en cache. NHibernate inclut également des fonctionnalités permettant d'optimiser le code SQL généré pour le système de gestion de base de données actuel. Par exemple, si vous utilisez SQL Server, il se peut que le code SQL soit légèrement différent de celui d'Oracle.

Il est à noter qu'il ne doit pas être une situation de tout ou rien. Vous pouvez utiliser NHibernate pour 90% de votre accès à la base de données pour lequel cela fonctionne bien, puis utiliser le SQL direct pour les 10% où vous faites des requêtes complexes, des insertions par lots/mises à jour, etc