内存注意事项

图像 当导出成RTF和TIFF格式时,要限制使用大型图像。请注意这样的情况,再导出TIFF和RTF时,即使只有一幅图片,它也会由于在一个很长的报表的每一页重复出现而导致使用大量内存。

如果您不需要执行导出操作,或者您将会导出报表到Excel,PDF或者HTML格式,重复的图像将仅保存一份以节省内存开销,但是必需比较操作会给报表处理过程带来额外的开销。

子报表限制重复区域中子报表的使用,因为每个子报表实例会消耗内存。例如,一个报表明细区域的子报表,明细区域重复2000次就会产生2000个子报表实例。嵌套子报表会产生更多的实例。如果您需要在重复区域使用子报表,请在ReportStart事件中建实例化这些对象,而不是在重复区域的Format事件当中。这样的话,实例仅仅会初始化一次,可以节约内存开销。

CacheToDisk 设置Document对象的CacheToDisk 属性为True。会增加事件处理时间,这将导致文件缓存到磁盘而不是将全部报表加载到内存。PDF导出过程会检测到这个设置,并使用缓存的报表进行导出。这里请注意,只有PDF导出会受到CacheToDisk属性的影响;其他导出有可能在报表过大时内存溢出。另外还要注意,CacheToDisk使用IsolatedStorage存储页面的canvas项到磁盘。若要使用CacheToDisk,您还必须拥有IsolatedStorageFilePermission。

摘要将摘要(包含页面数量和报表总数)放置在头区域会严重影响内存消耗和呈现速度,即使使用了CacheToDisk属性。

这是因为这一部分将延迟呈现,直到ActiveReports 计算出接下来的页数。这时,CacheToDisk 将无法进行任何优化页数越多,影响就越明显

但是,一个组头区域的总计不会太影响性能。

释放报表为正确的从内存中释放一个报表实例,请按照以下步骤顺序:

1.     调用Document对象的Dispose()方法

2.     调用报表对象的Dispose()方法

3.     设置报表对象为null

以下代码按照以上顺序释放一个报表。

Visual Basic.NET 中编写的代码

rpt.Document.Dispose ()

rpt.Dispose ()

rpt = Nothing

C# 中编写的代码

rpt.Document.Dispose();

rpt.Dispose();

rpt = null;