растет память
растет память
Здравствуйте.
Программно вызываю на просмотр один и тот же шаблон на разных данных:
public void ShowRenderedReport(DataSet ds)
{
if (stiReport == null)
{
stiReport = CreateStiReport();
stiReport.Load("bla-bla.mrt");
stiReport.Compile();
}
stiReport.Dictionary.DataSources.Clear();
stiReport.Dictionary.DataStore.Clear();
stiReport.RegData("data", ds);
stiReport.Dictionary.Synchronize();
stiReport.Render();
stiReport.Show(true);
stiReport.Dictionary.DataSources.Clear();
stiReport.Dictionary.DataStore.Clear();
stiReport.RenderedPages.Clear();
}
Проблема в том, что с каждым вызовом память используемая программой увеличивается
версия SR 2008.2.300
версия VS 2005
Программно вызываю на просмотр один и тот же шаблон на разных данных:
public void ShowRenderedReport(DataSet ds)
{
if (stiReport == null)
{
stiReport = CreateStiReport();
stiReport.Load("bla-bla.mrt");
stiReport.Compile();
}
stiReport.Dictionary.DataSources.Clear();
stiReport.Dictionary.DataStore.Clear();
stiReport.RegData("data", ds);
stiReport.Dictionary.Synchronize();
stiReport.Render();
stiReport.Show(true);
stiReport.Dictionary.DataSources.Clear();
stiReport.Dictionary.DataStore.Clear();
stiReport.RenderedPages.Clear();
}
Проблема в том, что с каждым вызовом память используемая программой увеличивается
версия SR 2008.2.300
версия VS 2005
растет память
Здравствуйте,
Почитайте пожалуйста вот этот топик на форуме:
http://forum.stimulsoft.com/Default.aspx?g=posts&t=142
Там описано почему так происходит и как с этим бороться.
Спасибо.
Почитайте пожалуйста вот этот топик на форуме:
http://forum.stimulsoft.com/Default.aspx?g=posts&t=142
Там описано почему так происходит и как с этим бороться.
Спасибо.
растет память
Здравствуйте.
Хотите сказать, что откомпилированный отчет нельзя оставлять в памяти?
Его надо обязательно разрушать и вновь загружать из бинарника при каждом просчете?
Но это же бред. Время на выделение памяти, на загрузку отчета, впустую гонять GC.
Может быть разработчику стоит внимательно посмотреть куда девается память?
Я почему оставляю отчет в памяти - мне критично время подготовки отчета.
На слабеньких компах это чувствительно.
Спасибо
Хотите сказать, что откомпилированный отчет нельзя оставлять в памяти?
Его надо обязательно разрушать и вновь загружать из бинарника при каждом просчете?
Но это же бред. Время на выделение памяти, на загрузку отчета, впустую гонять GC.
Может быть разработчику стоит внимательно посмотреть куда девается память?
Я почему оставляю отчет в памяти - мне критично время подготовки отчета.
На слабеньких компах это чувствительно.
Спасибо
растет память
Здравствуйте,
Спасибо.
Можно конечно. Но галвное потом не вызывать повторно компиляцию.Хотите сказать, что откомпилированный отчет нельзя оставлять в памяти?
Привидите пожалуйста код метода CreateStiReport.Его надо обязательно разрушать и вновь загружать из бинарника при каждом просчете?
Саиый быстрый способ это использование отчетов в виде классов c# или VB.Net.Но это же бред. Время на выделение памяти, на загрузку отчета, впустую гонять GC.
Может быть разработчику стоит внимательно посмотреть куда девается память?
Я почему оставляю отчет в памяти - мне критично время подготовки отчета.
На слабеньких компах это чувствительно.
Спасибо.
растет память
Здравствуйте,
и
в скомпилированном отчете, поскольку после компиляции отчета, все источники данных превращены в объекты. Также вот эту строку
нужно заменить на
Спасибо.
P.S. Некоторые строчки код здесь лишние. Не имеет смысла делатьmihanik11 писал(а): Программно вызываю на просмотр один и тот же шаблон на разных данных:
public void ShowRenderedReport(DataSet ds)
{
if (stiReport == null)
{
stiReport = CreateStiReport();
stiReport.Load("bla-bla.mrt");
stiReport.Compile();
}
stiReport.Dictionary.DataSources.Clear();
stiReport.Dictionary.DataStore.Clear();
stiReport.RegData("data", ds);
stiReport.Dictionary.Synchronize();
stiReport.Render();
stiReport.Show(true);
stiReport.Dictionary.DataSources.Clear();
stiReport.Dictionary.DataStore.Clear();
stiReport.RenderedPages.Clear();
}
Код: Выделить всё
stiReport.Dictionary.DataSources.Clear();
Код: Выделить всё
stiReport.Dictionary.Synchronize();
Код: Выделить всё
stiReport.Dictionary.DataStore.Clear();
Код: Выделить всё
stiReport.Dictionary.DataStore.Clear();
if (stiReport.CompiledReport != null)
stiReport.CompiledReport.Dictionary.DataStore.Clear();
растет память
Да там ничего особенного нет:Привидите пожалуйста код метода CreateStiReport.
Код: Выделить всё
public void CreateStiReport()
{
stiReport = new StiReport();
stiReport.EngineVersion = Stimulsoft.Report.Engine.StiEngineVersion.EngineV2;
stiReport.ReferencedAssemblies = new string[] { "System.Dll", "System.Drawing.Dll", "System.Windows.Forms.Dll", "System.Data.Dll", "System.Xml.Dll", "Stimulsoft.Controls.Dll", "Stimulsoft.Base.Dll", "Stimulsoft.Report.Dll" };
stiReport.ReportAlias = "Отчет";
stiReport.ReportGuid = "a5787ba193414e2e9cb05b3da95d4783";
stiReport.ReportName = "Отчет";
stiReport.ReportSource = null;
stiReport.ReportUnit = Stimulsoft.Report.StiReportUnitType.Centimeters;
stiReport.ScriptLanguage = Stimulsoft.Report.StiReportLanguageType.CSharp;
stiReport.ReportCacheMode = StiReportCacheMode.On;
}
СпасибоstiReport.CompiledReport.Dictionary.DataStore.Clear();