Повышение производительности при использовании прямой ado.net против ORM? - PullRequest
1 голос
/ 20 декабря 2009

получу ли я какой-либо прирост производительности, если я заменю свою часть приложения для доступа к данным с nhiberate на ado.net?

Я знаю, что NHibernate использует ado.net в своей основе!

1 Ответ

7 голосов
/ 20 декабря 2009

Краткий ответ:

Это зависит от того, какие операции вы выполняете. Вероятно, вы получите улучшение производительности, если будете писать хороший SQL, но в некоторых случаях производительность может ухудшиться из-за потери кэширования NHibernate и т. Д.

Длинный ответ:

Как вы упомянули, NHibernate находится поверх ADO.NET и обеспечивает уровень абстракции. Это делает вашу жизнь проще во многих отношениях, но, как и все уровни абстракции, она имеет определенные эксплуатационные затраты.

Основной случай, когда вы, вероятно, увидите выигрыш в производительности, - это когда вы работаете со многими объектами одновременно, например, обновляете много объектов или извлекаете большое количество объектов. Это происходит из-за работы, которую выполняет сессия NHibernate для отслеживания того, какие объекты изменены и т. Д. Мой опыт показывает, что производительность NHibernate значительно снижается по мере роста количества объектов в сеансе.

У NHibernate есть много способов улучшить производительность, и если вы действительно хорошо это знаете, вы можете заставить его работать достаточно близко к ADO.NET. Однако, если вы не знакомы с ним, вы можете легко выстрелить себе в ногу с точки зрения производительности. (Выберите проблему N + 1 и т. Д.)

В некоторых ситуациях производительность может ухудшиться при переключении с NHibernate на прямой ADO.NET. Это связано с тем, что уровень абстракции NHibernate представляет некоторые функции, которые могут улучшить производительность, например, кэширование. NHibernate также включает в себя функциональность для оптимизации сгенерированного SQL для текущей системы управления базами данных. Например, если вы используете SQL Server, он может генерировать немного другой SQL, чем если вы используете Oracle.

Стоит отметить, что это не обязательно должна быть ситуация типа «все или ничего». Вы можете использовать NHibernate для 90% доступа к базе данных, для которого он отлично работает, а затем использовать прямой SQL для 10%, где вы выполняете сложные запросы, пакетные вставки / обновления и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...