Инструмент бизнес-аналитики от компании Stimulsoft. Программное обеспечение для создания дашбордов и отчетов. Инструменты отчетности для любой платформы.
Мы ещё работаем над оптимизацией загрузки больших отчётов. На данный момент она по умолчанию отключена, но её можно включить с помощью следующего свойства:
Если вы открываете сразу сжатый mdz файл, то тут возникает еще одна проблема.
Сжатый отчёт сначала загружается в память, там распаковывается в поток, а уже потом начинает открываться из этого потока как из простого mdc файла.
Для всего этого задействуется достаточно много памяти, в вашем случае 50мб сжатый фай + 380мб распакованный файл = 430мб минимум в памяти занято ещё до начала процесса загрузки.
Как вариант решения этой проблемы, предлагаем на сервере упаковывать большой mdc файл вашими алгоритмами и на клиенте распаковывать его в mdc файл на диске, а уже потом загружать этот mdc файл.
В этом случае с использованием нового алгоритма mdc-файл будет загружаться в память по частям (страницам), что даст огромный выигрыш по памяти.
Да, такой вариант подходит.
Придется так и сделать.
Хотя хотелось бы получить такую реализацию внутри метода LoadDocument.
Все необходимое ведь есть.
Флаг оптимизации DocumentLoadingOptimization есть, CachePath для распаковки тоже есть.
Можно расчитывать на такую реализацию в следующих релизах?
fantomus писал(а):Да, такой вариант подходит.
Придется так и сделать.
Хотя хотелось бы получить такую реализацию внутри метода LoadDocument.
Все необходимое ведь есть.
Флаг оптимизации DocumentLoadingOptimization есть, CachePath для распаковки тоже есть.
Можно расчитывать на такую реализацию в следующих релизах?
Рассчитывать можно.
Мы рассмотрим возможность такой оптимизации.
Сообщим вам о результатах.
Попробовал загрузку большого отчета из файла на диске во вьювер.
Со строкой
StiOptions.Engine.DocumentLoadingOptimization=false;
файл с отчетом в 395 Мб в памяти разворачивается в 1,5 Гб и открывается вьювером в полном размере (со всеми страницами).
Со строкой
StiOptions.Engine.DocumentLoadingOptimization=true;
тот же файл с отчетом разворачивается в памяти в 520 Мб и открывается вьювером в полном размере (со всеми страницами).
Время загрузкт отчетов примерно одинаковое (~1мин).
Конечно второй вариант может решить проблему открытия больших отчетов на машинах с объемом оперативной памяти 1Гб, но все же, возможность ошибки остается. Есть ли какой-либо механизм динамической загрузки отчета во вьювер. Т.е. показать 1-2 страницы отчета, а остальное догружать в фоне?
Спасибо.
P.S. Версия генератора и отчет такие же как и у fantomus.
Ajax писал(а):Конечно второй вариант может решить проблему открытия больших отчетов на машинах с объемом оперативной памяти 1Гб, но все же, возможность ошибки остается. Есть ли какой-либо механизм динамической загрузки отчета во вьювер. Т.е. показать 1-2 страницы отчета, а остальное догружать в фоне?
В принципе это возможно. Мы постараемся внедрить этот функционал в ближайшее время.
О результатах сообщим.
Мы добавили кэширование документа отчёта при его открытии. Теперь проблем с памятью быть не должно.
Также мы доработали загрузку упакованных отчётов. Во можете проверить загрузку используя следующий код:
Обновил у себя версию до (1602).
Провел тесты с одним и тем же отчетом:
1. файл .mdz размером 25Мб
2. файл .mdc размером 400Мб
Результаты открытия отчета:
StiOptions.Engine.DocumentLoadingOptimization = true;
report.ReportCacheMode = StiReportCacheMode.Auto;
1. занял памяти 1 067 Мб
2. занял памяти 570 Мб
Во всех трех режимах StiReportCacheMode.Auto/Off/On результат одинаков.
Время формирования всех отчетов с любыми настройками около 1 мин.
По видимому, либо мы что-то не так делаем, либо изменения не включены в это релиз.
По вашим тестам, какое время должно уходить на загрузку отчетов с подобными размерами?