ActiveReports和Bitmaps使用太多内存

时间:2014-03-17 18:59:00

标签: c# activereports componentone

我们的软件需要生成可变大小的报告,这些报告可以轻松移动100页。其中一些页面包含大图像/位图。

是否有可靠的方法来阻止整个报告消耗所有可用内存?一旦我们有足够的页面生成,应用程序几乎永远不会完成创建报告而不会耗尽内存。我们无法释放的位图占用了大部分内存。 (在报告完成之前尝试处理它们会导致报告生成失败。)

3 个答案:

答案 0 :(得分:1)

约翰

您是否尝试过使用ActiveReports将缓存用于磁盘?

http://helpcentral.componentone.com/nethelp/AR7Help/OnlineEn/CacheToDiskAndResourceStorage.html 更多细节在这里: http://helpcentral.componentone.com/nethelp/AR7Help/OnlineEn/GrapeCity.ActiveReports.Document.v7~GrapeCity.ActiveReports.Document.SectionDocument~CacheToDisk.html

在运行报告之前进行此设置。例如: report.Document.CacheToDisk = true; report.Run();

答案 1 :(得分:0)

我认为您可以尝试将您的报告拆分为较小的块,运行它们,然后在生成所有页面后将所有报告合并为一个。

答案 2 :(得分:0)

除了将ActiverReports的CacheToDisk属性设置为True之外,还有一个建议是使用Image.FromStream而不是Image.FromFile来访问图像。

Image.FromFile使文件句柄处于打开状态,因此可能导致内存异常。

using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
   using (Image original = Image.FromStream(fs))
   {
      ...
   }
}

使用显式的Dispose(),using()语句或在位图上将值设置为null通常不能解决Image.FromFile的问题。

因此,如果您运行App一段时间并打开很多文件,请考虑使用Image.FromStream()。

此致 Mohita

相关问题