2013-09-27 4 views
3

Я следую за performance test, созданный сообществом Dapper.EF 5 benchmarks

В настоящее время я получаю следующее после запуска испытания 10000 раз:

  • EF 5 = 21595 мс
  • ADO.NET = 52183 мс
  • Dapper = 52499 мс
  • Ibatis = 83138 мс

Мне нужно, чтобы что-то помогло мне понять, почему EF быстрее. Что я сделал не так?

код, который я использую на Github

Спасибо !!!

ответ

6

Во-первых, EF определенно ускорился: они потратили много времени на совершенствование перфоманса - по большинству моих мер, он все еще имеет заметные накладные расходы. Рассмотрим: EF находится поверх ADO.NET. Если EF сообщает результаты, которые значительно быстрее чем ADO.NET, то (и я думаю, вы уже подозреваете это): вы не измеряете то, что вы думаете вы измеряете.

I подозреваемый ключевой вопрос здесь в том, что вы выполняете все операции в одном и том же контексте данных. Это означает, что вы, вероятно, сейчас просто подчеркиваете диспетчер идентификации и кеш. Я не могу запустить ваш код напрямую (потому что он использует Oracle и т. Д.), Но было бы интересно просмотреть фактические запросы, которые выполняются. В реальном мире каждый контекст данных имеет конечную единицу рабочего времени. Было бы невероятно редко выполнять 10 000 операций в одном и том же контексте данных. Более типичным было бы несколько операций.

Однако, несвязанный: я должен сказать: я очень доволен результатами, показывающими, что dapper находится в пределах 0,6% от производительности ADO.NET. Это в основном именно то, что мы собираемся использовать с dapper: полная производительность raw ADO.NET, но просто отнимающая боль от кодирования.