Краткий ответ: нет, в большинстве случаев NHibernate действительно замедляет вашу производительность.
Более длинный ответ: NHibernate использует базовые драйверы ADO.NET, включая OdbcConnection (если нет ничего лучше), для выполнения реальных запросов SQL. Кроме того, он использует немало размышлений, чтобы переварить запросы в SQL и превратить результаты SQL в списки объектов. Этот дополнительный слой, как бы он ни был гибок и мощен, будет работать медленнее, чем жестко закодированное «пожарное шланг» решение на основе DataReader.
Где NHibernate может получить вас ВНЕШНЕЕ быстродействие в "ленивой загрузке". Скажем, у вас есть список людей, у каждого из которых есть список телефонных номеров. Вы извлекаете людей из базы данных, просто чтобы узнать их имена. Наивная реализация на основе DataReader может включать вызов хранимой процедуры для людей, которая включает соединение с их телефонными номерами, которое в этом случае вам не нужно. Вместо этого NHibernate получит только People и установит «прокси» в ссылку на список PhoneNumbers; когда список должен быть оценен, прокси-объект выполнит другой вызов. Если номер телефона никогда не нужен, прокси никогда не оценивается, что избавляет вас от необходимости набирать ненужные номера.