Ряд вопросов.

Обсуждение Stimulsoft Reports.NET
TVV
Сообщения: 27
Зарегистрирован: 08 сен 2006, 15:07

Ряд вопросов.

Сообщение TVV »

Vital писал(а): Память занимается загруженной сборкой отчета. Выгрузить ее нельзя (можно вместе с доменом приложения).
Поэтому и нужно компилировать отчет на диск и потом грузить ее при помощи
StiReport.GetReportFromAssembly("Report.dll", true); В этом случае гарантируется однократная загрузка сборки
отчета в память.
Я не очень понимаю :(

- Запустил приложение. - "Съедено" 50 мб.

// !!! 100 записей = 10 страниц

- stiReport1 = StiReport.GetReportFromAssembly("Report.dll", true); - "Съедено" 80 мб.

- stiReport1.Dictionary.DataStore.Clear();
- stiReport1.RegData(dsWork);
- stiReport1.Render(false); - "Съедено" 81 мб.

// !!! 10000 записей = 1000 страниц
- stiReport1 = StiReport.GetReportFromAssembly("Report.dll", true); - "Съедено" 90 мб.

- stiReport1.Dictionary.DataStore.Clear(); - "Съедено" 90 мб.
- stiReport1.RegData(dsWork); - "Съедено" 90 мб.
- stiReport1.Render(false); - "Съедено" 280 мб.

Память отжирает (что логично) именно рендеринг, те самые "RenderedPages" и что-нибудь ещё по ходу...

А когда я третий раз запускаю обработчик

// !!! 100 записей = 10 страниц

- stiReport1 = StiReport.GetReportFromAssembly("Report.dll", true); - "Съедено" 280 мб.

- stiReport1.Dictionary.DataStore.Clear();
- stiReport1.RegData(dsWork);
- stiReport1.Render(false); - "Съедено" 280 мб.

Мне кажется, что память съедается в процecce рендеринга. Нет?
Но проблема в том, что не отдаёт её при, например, очередном вызове GetReportFromAssembly или Render...
Vital писал(а): 2. Так что там с экспортом в PDF ?

Извините, пропустили этот вопрос. Проверьте пожалуйста, если использовать вместо PDF скажем RTF будет ли повторяться проблема?
Понял проблему(а может и не проблему :)

вызываю stiReport1.Design();

ничего не меняю, закрываю окно дизайнера.

экспорт ни в один формат уже не работает, видимо очистились результаты рендеринга.
может это и правильно, но не очень очевидно.

Спасибо.
Vital
Сообщения: 647
Зарегистрирован: 09 июн 2006, 12:23

Ряд вопросов.

Сообщение Vital »

TVV писал(а):
Vital писал(а): Память занимается загруженной сборкой отчета. Выгрузить ее нельзя (можно вместе с доменом приложения).
Поэтому и нужно компилировать отчет на диск и потом грузить ее при помощи
StiReport.GetReportFromAssembly("Report.dll", true); В этом случае гарантируется однократная загрузка сборки
отчета в память.
- Запустил приложение. - "Съедено" 50 мб.

// !!! 100 записей = 10 страниц

- stiReport1 = StiReport.GetReportFromAssembly("Report.dll", true); - "Съедено" 80 мб.

- stiReport1.Dictionary.DataStore.Clear();
- stiReport1.RegData(dsWork);
- stiReport1.Render(false); - "Съедено" 81 мб.

// !!! 10000 записей = 1000 страниц
- stiReport1 = StiReport.GetReportFromAssembly("Report.dll", true); - "Съедено" 90 мб.

- stiReport1.Dictionary.DataStore.Clear(); - "Съедено" 90 мб.
- stiReport1.RegData(dsWork); - "Съедено" 90 мб.
- stiReport1.Render(false); - "Съедено" 280 мб.

Память отжирает (что логично) именно рендеринг, те самые "RenderedPages" и что-нибудь ещё по ходу...

А когда я третий раз запускаю обработчик

// !!! 100 записей = 10 страниц

- stiReport1 = StiReport.GetReportFromAssembly("Report.dll", true); - "Съедено" 280 мб.

- stiReport1.Dictionary.DataStore.Clear();
- stiReport1.RegData(dsWork);
- stiReport1.Render(false); - "Съедено" 280 мб.

Мне кажется, что память съедается в процecce рендеринга. Нет?
Но проблема в том, что не отдаёт её при, например, очередном вызове GetReportFromAssembly или Render...

Если отчет грузится при помощи StiReport.GetReportFromAssembly("Report.dll", true), и нигде не остается в приложении ссылок, то
проблем с памятью быть не должно на 100%. Пришилите код теста на support мы проверим где могут висеть хвосты. Кроме этого
после метода Render попробуйте очистить коллекцию страниц - stiReport1.RenderedPages.Clear(). Так же стоит прогнать этот тест по кругу,
скажем 10 раз одно и тоже. Ваше приложение может не сразу отдавать память назад, для .Net Это поведение нормально.
Vital писал(а): 2. Так что там с экспортом в PDF ?

Извините, пропустили этот вопрос. Проверьте пожалуйста, если использовать вместо PDF скажем RTF будет ли повторяться проблема?
Понял проблему(а может и не проблему :)

вызываю stiReport1.Design();

ничего не меняю, закрываю окно дизайнера.

экспорт ни в один формат уже не работает, видимо очистились результаты рендеринга.
может это и правильно, но не очень очевидно.

Спасибо.
Так и есть. Меняется статус отчета (хотя коллекция построенных страниц не очищается.

Спасибо.
TVV
Сообщения: 27
Зарегистрирован: 08 сен 2006, 15:07

Ряд вопросов.

Сообщение TVV »

Vital писал(а):

Так же стоит прогнать этот тест по кругу,
скажем 10 раз одно и тоже. Ваше приложение может не сразу отдавать память назад, для .Net Это поведение нормально.
Ваша правда :)
Сам пинаю сборщик мусора... Со второго раза - начинает освобождать память :)

Спасибо!
Ответить