Извлекать и обновлять большое количество записей сущностей в консольном приложении - PullRequest
0 голосов
/ 01 июня 2019

В поисках лучшего подхода для извлечения и обновления сущностей навалом. Пожалуйста, предложите лучший подход, чтобы справиться с этим требованием. Я получаю список направляющих (~ 80K +) из внешней базы данных и хочу обновить сущность в CRM, увеличивая целочисленное поле счетчика и устанавливая одно поле набора параметров. Насколько я понимаю, возможны следующие подходы:

  1. Использование классов с ранним связыванием - Запрос контекста в пакетах путем одновременной передачи идентификатора объекта 5K, а затем циклического перебора списка объектов и обновления контекста объекта с помощью цикла foreach.

  2. Использование QueryExpression - Передача идентификаторов Guid в пакете / странице размером 5 КБ в выражении запроса с помощью оператора ConditionOperator.In, retriveMultipleRespone, а затем цикл по сущностям и подготовка коллекции updaterequest и повторный вызов executeMultiple повторяют то же самое для остальных страниц. .

Пожалуйста, предложите, какой подход лучше или какой-либо другой подход к нему более эффективным способом Можем ли мы использовать многопоточность здесь

1 Ответ

0 голосов
/ 01 июня 2019

Классы с ранней привязкой просто обеспечивают строгую типизацию для объектов CRM, а ранняя или поздняя привязка практически не влияет на производительность. В обоих случаях вы захотите использовать операцию RetrieveMultiple для получения записей и операцию ExecuteMultiple для их обновления. Поскольку у вас уже есть Руководства, вам может не потребоваться извлекать записи перед их обновлением, это, очевидно, повысит производительность.

Из документации Microsoft по ExecuteMultiple операция имеет следующие соответствующие ограничения: https://docs.microsoft.com/en-us/dynamics365/customer-engagement/developer/org-service/use-executemultiple-improve-performance-bulk-data-load
- Существует ограничение в 2 одновременных запроса ExecuteMultiple на организацию
- Максимальный размер пакета по умолчанию для ExecuteMultiple составляет 1 тыс. Записей
Обе эти настройки можно изменить на уровне организации

Вы можете использовать многопоточность, и это может улучшить производительность, но у меня нет большого опыта в этой области. Только для 80k записей вам, вероятно, не нужно беспокоиться.

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