Проблема: я хочу использовать EF4.1 без компромиссов со скоростью и надежностью Корпоративной библиотеки Блок доступа к данным, который я знаю и которому доверяю.
Благодаря множеству ссылок Stackoverflow и блогов о настройке производительности EF, я публикую этот способ, среди многих, использовать EF4.1, который соответствует производительности блока доступа к данным ADO / Enterprise Lib (SqlDataReader).
Проект:
1. Нет ссылок на сущности / динамический sql. Я люблю linq, я просто пытаюсь использовать его против объектов в основном.
2. 100% хранимых процедур и без отслеживания, без слияния и, самое главное, никогда не вызывайте .SaveChanges (). Я просто вызываю метод вставки / обновления / удаления DbContext.StoredProcName (params). На данный момент мы исключили несколько элементов быстрой разработки EF, но мне достаточно способа, которым он автоматически создает сложный тип для вашего хранимого процесса.
GetString и подобные методы - это AbstractMapper, который просто проходит ожидаемые типы и преобразует источник данных в тип.
Так что, насколько мне известно, это показатель, который нужно побить. Было бы трудно принять что-то, что я знаю медленнее.
Это МЕДЛЕННО !!! Намного медленнее!
Это больше похоже на это !!
Performance Pie
Исходя из моих результатов, диаграмма производительности должна увеличить накладные расходы на отслеживание более чем на 1%.
Я попытался предварительно скомпилировать представления, и ничто не получило такой большой импульс, как отсутствие отслеживания! Зачем?? Может быть, кто-то может вмешаться в это.
Таким образом, это не совсем справедливо для сравнения с Enterprise Lib, но я делаю один несвязанный вызов в базу данных, чтобы загрузить метаданные, которые, как я понимаю, загружаются один раз на пул приложений IIS. По сути один раз в жизни вашего приложения.
Я использую EF для автоматической генерации хранимых процедур, и я использовал Linq для Edmx , чтобы автоматически импортировать все эти узлы функции edmx для сопоставления с сущностями. Затем я автоматически создаю репозиторий для каждой сущности и движка.
Поскольку я никогда не вызываю SaveChanges, я не удосужился потратить время на отображение сохраненных процедур в конструкторе. Это занимает слишком много времени, и это легко сломать и не знать. Поэтому я просто вызываю процы из контекста.
Прежде чем я на самом деле реализую это в своем новом веб-приложении для доставки критически важного медицинского оборудования, буду признателен за любые наблюдения и критические замечания.
Спасибо!