Ответ 1
Я не думаю, что вы улучшите производительность при использовании инфраструктуры Entity:
Запрос
- Загрузка каждой записи по отдельному запросу не очень хороша
- Вы можете повысить производительность, загрузив несколько записей в один и тот же запрос. Например, вы можете загружать небольшую партию записей, используя либо || в состоянии или
Contains
(например,IN
в SQL).Contains
поддерживается только .NET 4.0. - Еще одно усовершенствование может заменить запрос на хранимую процедуру и параметр табличного значения, чтобы передать все направляющие на SQL-сервер, присоединиться к A с X.Guids и получить результаты. Табличные параметры поддерживаются только в SQL 2008 и более поздних версиях.
Изменение данных
- Вам
не нужноне вызыватьSaveChanges
после каждой модификации. Вы можете вызвать его после цикла foreach, и он все равно будет работать. Он будет передавать все изменения в одиночной транзакции, но вы не получите никакого повышения производительности при такой операциии в соответствии с этим ответом она может дать вам значительный импульс. - EF не поддерживает групповое дозирование, и из-за этого каждое обновление или вставка всегда выполняет отдельную обратную связь с базой данных. Нет никакого способа обойти это при использовании EF для изменения данных, кроме внедрения целого нового поставщика EF ADO.NET(это похоже на запуск нового проекта).
- Снова решение уменьшает округление, используя хранимую процедуру с параметром таблицы
- Если ваша БД также использует этот GUID в качестве первичного ключа и кластерного индекса, у вас есть другое снижение производительности индекса переупорядочения после каждой вставки= изменение данных на диске.
Проблема заключается не в алгоритме, а в способе обработки данных и технологий, используемых для обработки данных. Основа сущности не является хорошим выбором для насосов данных. Вы должны перейти с этой информацией к своему боссу, потому что улучшение производительности означает более сложные изменения в вашем приложении. Это не ваша вина, и это не ошибка программиста, который сделал заявку. Это особенность EF, которая не очень хорошо известна, и, насколько я знаю, она четко не указана в каких-либо лучших практиках MS.