Добрый день!
Провели много экспериментов на самом последнем билде - 2014.2.2000.0.
Результаты такие. В нашем проекте на последнем билде всё равно вылетает System.OutOfMemory exception, каждый раз по-разному, когда на 50-й, когда на 67-й странице, т.е. при простом скроллинге. Замечу, что при этом ReportCacheMode == On.
Специально создал рабочий пример отчёта с всё теми же 182 страницами, все они лежат в поддиректории Certificates проекта, и файл Certificates.mrt, который загружается динамически.
Какую корреляцию обнаружили. Если создавать отчёт так:
Код: Выделить всё
StiReport report = new StiReport();
report.Load("certificates.mrt");
report.Dictionary.Variables["StartPath"].Value = programStartPath;
report.Dictionary.Synchronize();
report.Show();
То всё нормально работает, но только с включённым флагом
ReportCacheMode == On.
Ошибка возникает (причём не всегда, - она не явная, т.е. иногда есть, иногда нет), когда отчёт создавать так:
Код: Выделить всё
StiReport report = new StiReport();
report.Load("certificates.mrt");
report.Dictionary.Variables["StartPath"].Value = programStartPath;
report.Dictionary.Synchronize();
StiViewerControl stiPreview = new StiViewerControl()
{
Dock = DockStyle.Fill,
Visible = true,
// set option flags
ShowPrint = true,
ShowOpen = true,
ShowEditor = true,
ShowPageNew = true,
ShowSendEMail = true,
ShowThumbsPanel = true,
ShowSaveDocumentFile = true,
};
// assign report object to preview control
stiPreview.Report = report;
stiPreview.FirstPage();
stiPreview.SetZoom(100);
this.Controls.Add(stiPreview); // add created preview control to the form
this.WindowState = FormWindowState.Maximized; // set form maximized
// start report
report.Render();
Во втором случае, иногда приходится запускать отчёт 1-3 раза, чтобы получить ошибку. В этом случае ошибка выглядит так:
Код: Выделить всё
************** Текст исключения **************
System.ArgumentOutOfRangeException: Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции.
Имя параметра: index
в System.Collections.CollectionBase.System.Collections.IList.get_Item(Int32 index)
в Stimulsoft.Report.Engine.StiPageNumberCollection.get_Item(Int32 index)
в Stimulsoft.Report.Engine.StiRenderProviderV2.IsFirstPage(StiReport report, StiPage page)
в Stimulsoft.Report.Engine.StiRenderProviderV2.ProcessPageToCache(StiReport report, StiPage page, Boolean final)
в Stimulsoft.Report.Components.StiPagesCollection.SavePage(StiPage page)
в Stimulsoft.Report.Components.StiPagesCollection.AddPageToQuickCache(StiPage page, Boolean savePage)
в Stimulsoft.Report.Components.StiPagesCollection.GetPage(StiPage page)
в Stimulsoft.Report.Components.StiPagesCollection.get_Item(Int32 index)
в Stimulsoft.Report.Viewer.StiViewerControl.GetVisiblePages()
в Stimulsoft.Report.Viewer.StiViewerControl.view_MouseMove(Object sender, MouseEventArgs e)
в System.Windows.Forms.Control.OnMouseMove(MouseEventArgs e)
в System.Windows.Forms.Control.WmMouseMove(Message& m)
в System.Windows.Forms.Control.WndProc(Message& m)
в System.Windows.Forms.ScrollableControl.WndProc(Message& m)
в System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
в System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
в System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
и иногда следом за ней следует второй exception:
Код: Выделить всё
************** Текст исключения **************
System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.
в Stimulsoft.Report.Viewer.StiViewerControl.GetPageRect(StiPageParamView view)
в Stimulsoft.Report.Viewer.StiViewerControl.view_MouseMove(Object sender, MouseEventArgs e)
в System.Windows.Forms.Control.OnMouseMove(MouseEventArgs e)
в System.Windows.Forms.Control.WmMouseMove(Message& m)
в System.Windows.Forms.Control.WndProc(Message& m)
в System.Windows.Forms.ScrollableControl.WndProc(Message& m)
в System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
в System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
в System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
Отчёт (можно запустить без компиляции из директории \bin\Debug\) с исходными кодами по ссылке
http://rghost.ru/58916091