<< Click to Display Table of Contents >> Разработка > Рекомендации по разработке для масштабируемых систем > Быстродействие операций Получение связанных документов |
Производительность системы зависит в том числе от скорости обработки связанных документов. Чтобы этот процесс не занимал длительное время, программный код должен быть оптимальным. Для этого проверьте, что в коде не используются устаревшие методы GetRelated() и GetRelatedFrom().
Кроме этого, определите, нагружают ли систему запросы получения связей. Для этого в решении «Мониторинг системы Directum RX» можно проанализировать длительность HTTP и SQL-запросов при обращении к базе данных и отследить, какие запросы к веб-серверу в прикладном коде нагружают систему.
Чтобы оптимизировать программный код, в котором используются методы для получения связанных документов, соблюдайте рекомендации из этого раздела.
Чтобы ускорить обработку связанных документов, вместо устаревших методов GetRelated() и GetRelatedFrom() с типом возвращаемого значения IEnumerable<T> используйте методы GetRelatedDocuments() и GetRelatedFromDocuments(). Они возвращают значение с типом IQueryable<T>. Пример кода без оптимизации
Пример оптимального кода
Некоторые запросы с методами GetRelatedDocuments() и GetRelatedFromDocuments() не поддерживаются. Например, если в запросе используется конструкция, которую нельзя преобразовать в SQL. В этом случае после вызова методов добавьте расширения ToList() или ToArray(). Такой код будет работать без оптимизации. Пример кода, который не преобразуется в SQL
Пример доработки кода с использованием ToList()
|
Вместо совместного вызова методов GetRelatedDocuments() и GetRelatedFromDocuments() используйте метод GetRelatedAndRelatedFromDocuments(). Пример кода без оптимизации
Пример оптимального кода
|
Если нужны данные о связях документа, а не сами документы, то используйте репозиторий связей DocumentRelations. Пример кода без оптимизации
Пример оптимального кода
|
В циклах и повторяемых выражениях не используйте методы GetRelatedDocuments() и GetRelatedFromDocuments() с одинаковыми параметрами для одних и тех же документов. Иначе метод получает связанные документы при каждом вызове. Вместо этого рекомендуется получать список связанных документов только один раз, а затем обращаться к нему. |
Созданные связи, которых еще нет в базе данных, учитываются при вызове методов GetRelatedDocuments() и GetRelatedFromDocuments(). Для этого в них замыкаются запросы на получение данных. Чтобы этого не происходило, методы нужно использовать после сохранения связей. В результате запросы не замыкаются, и их можно дофильтровать в прикладном коде. |
Не рекомендуется без необходимости получать связанные документы целиком, если нужны только некоторые их свойства. Вместо этого используйте ограниченную выборку. Таким образом SQL-запросы к сущностям становятся проще и выполняются быстрее, при этом можно избежать сканирования таблиц. Также это справедливо не только для связей, но и для любых запросов к сущностям. Пример оптимального кода для запроса одного параметра
Пример оптимального кода для запроса нескольких параметров
|
© Компания Directum, 2024 |