Скорость отображения NHibernate действительно медленная - как я могу улучшить ее? - PullRequest
1 голос
/ 01 сентября 2011

У меня есть простой запрос, который я выполняю с использованием NHibernate, и простой (мой) SQL:

SELECT Col1, Col2, Col3, Col4 FROM Data LIMIT 100000;

Время запроса составляет около 250 мс.

Когда NHibernate отображает результатыдля списка объектов, это занимает около 4,5 секунд.Когда я выполняю сопоставление с использованием наборов данных / datarows и синтаксиса строки ["Col1"], это занимает около 1,5 секунд.

Единственное различие, которое я вижу между двумя методами, - это логика сопоставления.У меня диагностика и кэширование nhibernate отключены, и я использую сеанс без сохранения состояния.

Мой запрос выглядит так:

        using (var session = OpenStatelessSession())
        {
            return session.QueryOver<Data>()
                .Take(100000)
                .List();
        }

И мое отображение выглядит так:

        Id(x => x.Col1);
        Map(x => x.Col2);
        Map(x => x.Col3);
        Map(x => x.Col4);

Как улучшить производительность отображения nhibernate?Возможно, что-то мне не хватает?

1 Ответ

0 голосов
/ 01 сентября 2011

Если у вас действительно есть приложение, которое должно считывать 4 столбца данных, 100 000 строк за раз и производительность является критически важной, тогда не используйте NHibernate. Однако, если это не похоже на типичное использование базы данных в вашем приложении, значит, оно не слишком много говорит вам. (Это немного похоже на сравнение скорости мотоцикла, пикапа и грузовика за четверть мили).

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

Был предпринят ряд попыток сравнить NHibernate с другими ORM и стратегиями доступа к данным (например, это сравнение NHibernate и EF ). Они, как правило, противоречивы, и, по моему опыту использования NHibernate в течение пяти лет, они мало актуальны.

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

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