2015-10-23 38 views
6

当我以内部表格(数十万甚至上百万)的形式将大量数据加载到内存中时,我应该在完成后立即刷新内部表来手动清理条目?我应该在刷完内部表后刷新内部表吗?

我假设这些变量一旦离开作用域就会被自动清除(即程序结束,类实例被释放,...)。但是如果我正在处理长时间运行的批处理程序,释放这些临时表是否合理?

这样做会不会以明显的方式提高性能?或者是这样做的唯一原因是为了避免陷入内存限制?

回答

3

释放未使用的内存是有意义的,特别是如果代码中有明显的位置这样做。如果您可以简单地离开作用域(方法)并让系统自动丢弃所有局部变量,这很容易。即使你只是避免陷入内存限制,这已经是值得的 - 而且,你正在使系统的所有其他用户的生活更轻松。

+0

只有一个问题:它会在某些方面的性能影响? – Christian

+1

@Christian这取决于你是否(以及如何)访问表。一个好的经验法则是 - 如果你经常访问表,让它们不必要地增长是一个坏主意。如果你根本不访问表格 - 那么为什么要把内容放在第一位呢? – vwegert

3

你是对的,当离开一个子程序或方法时,变量将被清除。

我认为刷新表是一种很好的做法,实际上我大部分时间都是这样做的,但是在处理大量数据时我使用FREE而不是刷新。

this link

为了确保表本身已经初始化,您可以使用 声明

REFRESH ITAB。

这总是适用于表格的主体。对于REFRESH,表格中的初始内存要求仍保留。

要释放此内存空间,请使用语句

免费itab。

您可以使用FREE直接初始化一个内部表,并且在不先使用REFRESH或CLEAR语句的情况下释放其整个内存空间,包括初始内存 要求。像 REFRESH,FREE可以访问表格主体,而不是表格工作区域。在免费陈述之后,内部表仍然存在。它仍然占用其标头所需内存量的 (目前为256字节)。当你为表格填充 时,系统必须分配新的内存空间到 的行。

希望它可以帮助