|
Тормоза на строке РезультатПостроителя = ПостроительОтчета.Результат; |
☑ |
0
mixqn
02.08.11
✎
13:21
|
Коллеги!
Какая может быть причина жутких тормозов на строке кода
РезультатПостроителя = ПостроительОтчета.Результат;
Запрос по идее к этому моменту выполнен. В результате запроса всего порядка 10-20 строк, реже до 30. Тем не менее, на этой строке тратится порядка 80% времени по замеру производительности или (ВНИМАНИЕ!!!) порядка 450-500 секунд!!!! В чем может быть причина и как можно побороться с проблемой? Заранее спасибо всем кто откликнется!
|
|
1
Scooter
02.08.11
✎
13:28
|
РезультатПостроителя = ПостроительОтчета.Результат;
ЕМНИП как раз происходит выполнение запроса
|
|
2
mixqn
02.08.11
✎
13:32
|
Тогда что же происходит по строке
ПостроительОтчета.Выполнить();
|
|
3
Михаил Козлов
02.08.11
✎
13:57
|
(2) Насколько я понимаю:
- Выполнить() - принудительное выполнение запроса;
- Результат - получение результата, без, ВОЗМОЖНО, выполнения запроса (если в построителе не изменилось то, что влияет на результат запроса).
|
|
4
mixqn
02.08.11
✎
15:12
|
По синтаксис-помощнику:
ПостроительОтчета (ReportBuilder)
Результат (Result)
Использование:
Только чтение.
Описание:
Тип: РезультатЗапроса. Результат выполнения запроса для формирования отчета.
Я лично всегда считал, что запрос выполняется методом Выполнить() и в свойство Результат попадает результат запроса (уже выполненного).
Сейчас код у меня написан вот так:
ПостроительОтчета.Выполнить();
РезультатПостроителя = ПостроительОтчета.Результат;
ВыборкаДанных = РезультатПостроителя.Выбрать();
Было
ПостроительОтчета.Выполнить();
ВыборкаДанных = ПостроительОтчета.Результат.Выбрать();
Разницы никакой и в том и в другом случае тормоза на строе после «ПостроительОтчета.Выполнить();»
|
|
5
mixqn
02.08.11
✎
15:16
|
Попробую сделать вот так:
Запрос = ПостроительОтчета.ПолучитьЗапрос();
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДанных = РезультатЗапроса.Выбрать();
Вдруг поможет...
|
|
6
Fragster
гуру
02.08.11
✎
15:18
|
(0) дело в запросе, инфа 100%
|
|
7
mixqn
02.08.11
✎
15:24
|
(6) Попробую еще раз покопать в этом направлении, но вообще, запрос проверялся и отлаживался, точно уже не помню время выполнения, но точно в пределах 30 секунд, тут же зависание на порядок дольше.
|
|
8
Defender aka LINN
02.08.11
✎
15:26
|
(3) Неправильно. Выполнить() взводит у него внутри флаг. А когда идет обращение к Результату, то если флаг взведен, то происходит выполнение запроса.
|
|
9
Fragster
гуру
02.08.11
✎
15:32
|
(7) если в выводимых полях или отборе есть обращение через ".", то все магическим образом может меняться
|
|
10
mixqn
02.08.11
✎
16:03
|
Беда еще и в том, что иногда все работает легко и быстро, а иногда виснет. Зависимости выявить пока не удалось. Единственные сомнения – RLS. У меня с полными правами и весь запрос полностью (порядка 3-х тыс. строк в результате) и запрос с отборами (порядка 20 строк в результате) выполняются в приемлемое время. Без отборов в пределах 30 секунд, с отборами буквально 2-3, максимум, 5 секунд. Проблема начинается у пользователей с ограниченными правами. Данные выбираются из таблиц, где настроена RLS. Пробовал запускать запрос у них в консоли отчетов. Работало все нормально. Уже не знаю куда залезть…
|
|
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший