2016-09-29 5 views
0

У нас есть некоторые панели инструментов в приложении, в которых есть 10 000 записей, конечно, у нас есть разбиение на страницы, но EF очень плох с точки зрения производительности, и все те Get Запросы для массового извлечения очень медленные.Заменить запрос EntityFramework с ORM для повышения производительности - необходимо поддерживать iqueryable

Я искал несколько вариантов замены этих запросов либо с помощью Micro-ORM, либо с помощью ORMLite, либо, к сожалению, они не поддерживают iqueryable, что необходимо для наших панелей мониторинга/сетей, потому что у нас много чего происходит например, фильтрация-поиск-сортировка и т. д.

Вопрос, который я хотел бы задать, есть ли кто-нибудь, столкнувшийся с подобной ситуацией? Какой путь вы выбрали?

+0

Ну, вы можете править dapper out - он не suppot 'IQueryable '; посмотрели ли вы на такие инструменты, как LLBLGenPo? вы пробовали самые последние версии EF? –

+0

Да, мы используем EF 6.0+ - я не заглянул в LLBLGenPo, позвольте мне изучить это! – vran

+0

Можете ли вы привести пример медленного запроса LINQ? Большую часть времени, заменяя EF другим инструментом, ничего не улучшит, если вы все еще хотите поддержку IQueryable. Панели мониторинга с только 10 000 записей ничего, даже несколько миллионов не так много, так что проблема действительно вызвана из-за Entity Framework? Существует множество опций и сторонней библиотеки для повышения производительности, таких как Query Cache, Include Optimized, Include Filtering и т. Д. Я думаю, что первый шаг, прежде чем думать о переключении на другую ORM, поддерживающую «IQueryable», будет заключаться в том, чтобы убедиться, что EF не может сделать работа права. –

ответ

2

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

Затем настроить базу данных, переиндексации, перейти к более быстрой машины и т.д.

Если все еще слишком медленно, пытаясь рассмотреть старую добрую Linq2SQL, это быстрее материализации.

Если все еще не удовлетворены, забудьте о IQueryable, получите параметризованный просмотр/сохраненную процедуру и используйте Dapper для вызова сервера со всеми необходимыми параметрами.

+0

Да, первое, что я пробовал, - это применить AsNoTracking() к запросам Dashboard. Другие части системы должны иметь отслеживание, поскольку мы используем EF context-change (changeTracker), чтобы отслеживать измененные объекты Entities for Auditing, однако в случае информационных панелей, большинство из которых доступны только для просмотра, нам не нужно отслеживать - после все усилия, вывод, мы должны избавиться от EF для тяжелых операций извлечения – vran

 Смежные вопросы

  • Нет связанных вопросов^_^