Столкнулись с проблемой нехватки памяти при генерации(и конвертации в PDF) нескольких больших(болле 500 страниц) отчётов.
Поискал подобные вопросы и нашел вот что :
"есть возможность кэшировать отчеты. В этом случае только небольшая часть отчета находится в памяти, все остальное выгружается в спецаильный кэш. Скорость построения падает не сильно, есть небольшие ограничения, но потребеление памяти радикально меньше. Т.е. можно построить очень большие отчеты, при этом в памяти будет храниться только 20-30 страниц (это настраевается) отчета. Включить кэширование можно при помощи свойства ReportCacheMode отчета."
Ну, вот у меня и возник ряд вопросов.
1. "есть небольшие ограничения". А можно подробнее? У нас документы(отчёты) генерируются и конвертируются в PDF параллельно в нескольких процессах, и в каждом ещё несколько потоков. Не возникнет ли конфликтов при кэшировании?
2. Подскажите наилучшую стратегию. Чаще всего генерится много маленьких документов, но иногда "попадаются" очень большие. Т.е., скорее всего, нужно перед генерацией(рендерингом) устанавливать ReportCacheMode в нужное значение. Как лучше это сделать? Анализировать DataSet(размер)? Установить свойство в значение ReportCacheMode.Auto? Тогда подскажите, каков алгоритм при таком значении и где можно установить кол-во страниц(в примере выше "при этом в памяти будет храниться только 20-30 страниц (это настраевается)").
3. Может ещё подскажете что-нибудь в поисках решений для генерации больших док-тов? Кстати, есть какие-нибудь данные, о максимальном кол-ве страниц в документе, на которые способен СтимулСофт? Напомню, что в итоге нам нужны PDF -ки. Есть какие-то ограничения?
4. До сих пор не доводилось основательно изучать исходники. Подскажите, плиз. Если я регистрирую DataSet как источник данных. Что происходит потом? Именно этот дадасет и используется для построения отчёта? или он копируется? Или данные перегоняются во внутренние структуры?
К чему я это. Мы собираем данные в XML. С радостью именно в виде XML и отдавали бы их отчётнику. Это сэкономило бы нам время и память. Но, сейчас нам приходится создавать датасет, так-как другого спрособа мы не нашли. Есть какие-то варианты?
Понимаю, что вопросов много, но они(ответы) все для нас действительно важны.
Спасибо.
За продукт, и за ответы
