NHibernate быстрее, чем классический драйвер ODBC? - PullRequest
2 голосов
/ 25 марта 2011

Я работаю над приложением с довольно простой моделью данных (4 таблицы, в том числе две маленькие, имеющие около 10 строк, и две большие, имеющие сотни строк).Я работаю с C # и в настоящее время использую OdbcDriver для моего уровня доступа к данным.Мне было интересно, есть ли разница в производительности между этим драйвером или NHibernate?Приложение работает, но я хотел бы знать, ускорит ли его установка NHibernate вместо классического OdbcDriver?Если это так, то стоит ли вообще устанавливать NHibernate?(согласно тому факту, что я никогда не использовал такую ​​технологию)

Спасибо!

Ответы [ 4 ]

10 голосов
/ 25 марта 2011

Краткий ответ: нет, в большинстве случаев NHibernate действительно замедляет вашу производительность.

Более длинный ответ: NHibernate использует базовые драйверы ADO.NET, включая OdbcConnection (если нет ничего лучше), для выполнения реальных запросов SQL. Кроме того, он использует немало размышлений, чтобы переварить запросы в SQL и превратить результаты SQL в списки объектов. Этот дополнительный слой, как бы он ни был гибок и мощен, будет работать медленнее, чем жестко закодированное «пожарное шланг» решение на основе DataReader.

Где NHibernate может получить вас ВНЕШНЕЕ быстродействие в "ленивой загрузке". Скажем, у вас есть список людей, у каждого из которых есть список телефонных номеров. Вы извлекаете людей из базы данных, просто чтобы узнать их имена. Наивная реализация на основе DataReader может включать вызов хранимой процедуры для людей, которая включает соединение с их телефонными номерами, которое в этом случае вам не нужно. Вместо этого NHibernate получит только People и установит «прокси» в ссылку на список PhoneNumbers; когда список должен быть оценен, прокси-объект выполнит другой вызов. Если номер телефона никогда не нужен, прокси никогда не оценивается, что избавляет вас от необходимости набирать ненужные номера.

1 голос
/ 25 марта 2011

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

1 голос
/ 25 марта 2011

NHibernate не предназначен для того, чтобы делать его быстрее, и он всегда будет медленнее, чем просто использование примитивов базы данных, как вы (он использует их «под капотом»).

По моему мнению, NHibernate о создании многократно используемого слоя сущностей, который можно применять к различным приложениям или, по крайней мере, повторно использовать в нескольких областях в одном приложении от среднего до крупного. Поэтому перемещение вашего приложения в NHibernate было бы пустой тратой времени (звучит очень мало).

Вы можете повысить производительность, используя специальный драйвер базы данных для вашей базы данных.

0 голосов
/ 25 марта 2011

ПОДСКАЗКА: NHIbernate не волшебство. Он находится на вершине ADO.NET. Хотите более быстрый водитель? ПОЛУЧИТЬ ОДИН. Почему вы все равно используете медленную устаревшую технику, такую ​​как ODbc? Каков ваш источник данных? Разве они не поддерживают ЛЮБОЙ новый стандарт, такой как OLEDB?

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