Страница 1 из 1

И снова большие отчеты

Добавлено: 12 июн 2013, 18:27
fantomus
Здравствуйте!

В процессе разработки и формирования больших отчетов (1000 страниц и более) выяснилось, что есть проблемы с размером готового отчета (файл MDC). Соответственно, возникают банальные проблемы с нехваткой памяти, как при генерации отчета, так и при выполнении экспорта в сжатый или зашифрованный форматы.

Например, у меня отчет размером в 300 Мб (MDC) не удается сохранить в сжатом виде из-за ошибки "Exception of type 'System.OutOfMemoryException' was thrown."

Я обратил внимание на несколько моментов в структуре готового отчета:
1. Названия некоторых объектов слишком длинные и значительно увеличивают размер.
Например, пришлось отказаться от таблиц, и только на этом я добился уменьшения размера почти в 2 раза.
Название объекта для ячейки таблицы значительно длиннее названия текстового элемента:
type="Text"
type="Stimulsoft.Report.Components.Table.StiTableCell"
2. Некоторые атрибуты элементов отчета могли бы использовать значения по умолчанию и не сохраняться в готовом отчете.
Например: isSer="true" или "Transparent"
При этом в моем готовом отчете более миллиона элементов и у всех одинаковые значения isSer="true", "Transparent". Это не один мегабайт лишних данных.
3. Использование стилей (на которые я очень надеялся) не приводит к уменьшению размеров готового отчета, так как параметры стиля повторяются у каждого элемента.

В результате вырисовываются следующие вопросы/предложения по усовершенствованию и оптимизации формата готового отчета:
1. Можно ли ввести короткие названия (алиасы) для всех типов элементов отчета?
2. Можно ли использовать значения по умолчанию для атрибутов без сохранения в готовом отчете?
3. Можно ли не дублировать в каждом элементе параметры стиля?

Спасибо

Re: И снова большие отчеты

Добавлено: 12 июн 2013, 18:42
fantomus
Да, забыл упомянуть, что для нас этот вопрос критичен потому, что все отчеты формируются на выделенном сервере и доставляются пользователю в приложение через WCF-сервис. Поэтому кеширование при генерации ничего не решает. И объем передаваемых данных сильно влияет на конечный результат.

Re: И снова большие отчеты

Добавлено: 13 июн 2013, 12:01
HighAley
Здравствуйте.
fantomus писал(а):1. Можно ли ввести короткие названия (алиасы) для всех типов элементов отчета?
Короткие названия добавили для StiPanel и StiTableCell, изменения будут доступны в нашем следующем предрелизном билде завтра.
fantomus писал(а):2. Можно ли использовать значения по умолчанию для атрибутов без сохранения в готовом отчете?
Для большинства свойств так и делается. К сожалению, для некоторых это пока технически невозможно.
fantomus писал(а):3. Можно ли не дублировать в каждом элементе параметры стиля?
Со стилями тоже пока некоторые трудности. Формат документа уже устоялся, и изменения в нём требуют изменения значительной части кода и последующего долгого тестирования. Также от этого может пострадать обратная совместимость. В данный момент у нас есть другие более приоритетные задачи.

Вы можете сохранять отчеты в mdz формат.
В последних билдах добавлены новые методы сохранения/загрузки файлов готовых отчетов. Эти методы работают при включении свойств:

Код: Выделить всё

StiOptions.Engine.DocumentLoadingOptimization = true;
StiOptions.Engine.DocumentSavingOptimization = true;
или при включенном кэшировании в отчете.

Смысл этих методов: отчет сохраняется/загружается по одной странице, соответственно расход памяти уменьшается в разы.

Пока есть нюанс - из-за особенностей сериализации штрихкодов и чартов оптимизированной загрузке лучше скармливать отчеты после оптимизированного сохранения.

Спасибо.