Страница 1 из 1
Скорость компиляции отчета
Добавлено: 15 дек 2008, 05:20
Сергей
Доброго времени суток.
Заметил, что скорость и объем потребляемых вычислительных ресурсов компиляции отчета зависит от объема данных. Например, отчет по таблице, содержащей 1,7 млн записей по 4кб на 1 запись, компилируется около 4 минут. При этом загрузка процессора 50%, использование оперативной памяти превышает 700 Мб. (машина: Pentium IV 3ГГц, 1Гб RAM).
Можно как-то ускорить компиляцию?
Скорость компиляции отчета
Добавлено: 15 дек 2008, 10:29
Edward
Здравствуйте.
Вы не могли бы уточнить, о чем идет речь, о процедуре превращения класса отчета в код или о процессе построения отчета на основе скомпилированного шаблона, когда mrt шаблон уже скомпилирован и отчет просто обращается к такому огромному количеству данных?
Другими словами опишите, пожалуйста, Ваш шаги по построению (или компиляции) отчета и какой именно шаг поглощает такие системные ресуры.
Спасибо.
Скорость компиляции отчета
Добавлено: 16 дек 2008, 10:08
Сергей
Здравствуйте.
1. Запускаем дизайнер.
2. Добавляем в словарь таблицу на основе SQL запроса.
3. Создаем бэнд данных с парой полей из таблицы.
4. Переходим на вкладку предварительного просмотра.
Вот тут в строке состояния "компиляция" и поглощение ресурсов. Через несколько минут "отвисает" и начинается отрисовка страниц. Отрисовку страниц можно остановить, нажав отмену. С "компиляцией" никак, только ждать.
Скорость компиляции отчета
Добавлено: 16 дек 2008, 10:28
Vital
Здравствуйте,
unic писал(а):Здравствуйте.
1. Запускаем дизайнер.
2. Добавляем в словарь таблицу на основе SQL запроса.
3. Создаем бэнд данных с парой полей из таблицы.
4. Переходим на вкладку предварительного просмотра.
Вот тут в строке состояния "компиляция" и поглощение ресурсов. Через несколько минут "отвисает" и начинается отрисовка страниц. Отрисовку страниц можно остановить, нажав отмену. С "компиляцией" никак, только ждать.
Это не компиляция, это происходит процесс получения данных. Если есть возможность получить данные быстрее, то тогда лучше передать их в отчет в виду DataSet.
Спасибо.
Скорость компиляции отчета
Добавлено: 17 дек 2008, 03:04
Сергей
Здравствуйте.
То есть сначала происходит получение всех данных, лишь потом отрисовка? Нет возможности делать это параллельно, хотя бы на простых отчетах? Уж очень много памяти "съедает" отчет, всего лишь выводящий данные из таблицы..
Спасибо.
Скорость компиляции отчета
Добавлено: 17 дек 2008, 04:44
Edward
Здравствуйте.
Да, совершенно верно, сначала получение данных, пото отрисовка. Отменить эту схему не представляется возможным. Если Ваш отчет занимает
очень много страниц, то использование опции ReportCacheMode = On у объекта отчета, должно помочь снизить этот показатель, поскольку в этом случае будет происходить периодическая выгрузка отрендеренных отчетов в кэш на диск. К сожалению, система управления выделением памяти в .Net не позволяет контролировать процесс освобождения и перераспределения памяти так, как этого бы хотелось.
Спасибо.
Скорость компиляции отчета
Добавлено: 17 дек 2008, 07:40
Сергей
Спасибо за разъяснение.
Еще заметил, что объем подгружаемых данных зависит только от SQL запроса в источнике и не зависит от того, используются ли данные в отчете или нет.
В результате
отчет на детейловой таблице из 1 млн записей "съедает" огромное количество оперативной памяти.
Уменьшить использование памяти можно лишь правкой запроса? Или как-то можно заставить отчет не подгружать неиспользуемые данные?
Скорость компиляции отчета
Добавлено: 17 дек 2008, 14:59
Edward
Здравствуйте.
Для мастер-деталь отчетов, когда в детальном источнике огромное количество записей ситуацию с пересылкой сразу всех данных в отчет можно прооптимизировать. Для этого вместо Relation между бэндами, свяжите их при помощи параматров, как это показано в отчете "Master Detail with Parameters" в приложении Demo. Группа отчетов "SQL". Единственный нюанс в том отчете - это свойство Detail источника данных ReconnectOnEachRow = true. Выделите источник в Dictionary, переключитесь на закладку Properties и Вы увидите это свойство для SQL источника данных.
Спасибо.