2015-10-23 35 views
6

當我以內部表格(數十萬甚至上百萬)的形式將大量數據加載到內存中時,我應該在完成後立即刷新內部表來手動清理條目?我應該在刷完內部表後刷新內部表嗎?

我假設這些變量一旦離開作用域就會被自動清除(即程序結束,類實例被釋放,...)。但是如果我正在處理長時間運行的批處理程序,釋放這些臨時表是否合理?

這樣做會不會以明顯的方式提高性能?或者是這樣做的唯一原因是爲了避免陷入內存限制?

回答

3

釋放未使用的內存是有意義的,特別是如果代碼中有明顯的位置這樣做。如果您可以簡單地離開作用域(方法)並讓系統自動丟棄所有局部變量,這很容易。即使你只是避免陷入內存限制,這已經是值得的 - 而且,你正在使系統的所有其他用戶的生活更輕鬆。

+0

只有一個問題:它會在某些方面的性能影響? – Christian

+1

@Christian這取決於你是否(以及如何)訪問表。一個好的經驗法則是 - 如果你經常訪問表,讓它們不必要地增長是一個壞主意。如果你根本不訪問表格 - 那麼爲什麼要把內容放在第一位呢? – vwegert

3

你是對的,當離開一個子程序或方法時,變量將被清除。

我認爲刷新表是一種很好的做法,實際上我大部分時間都是這樣做的,但是在處理大量數據時我使用FREE而不是刷新。

this link

爲了確保表本身已經初始化,您可以使用 聲明

REFRESH ITAB。

這總是適用於表格的主體。對於REFRESH,表格中的初始內存要求仍保留。

要釋放此內存空間,請使用語句

免費itab。

您可以使用FREE直接初始化一個內部表,並且在不先使用REFRESH或CLEAR語句的情況下釋放其整個內存空間,包括初始內存 要求。像 REFRESH,FREE可以訪問表格主體,而不是表格工作區域。在免費陳述之後,內部表仍然存在。它仍然佔用其標頭所需內存量的 (目前爲256字節)。當你爲表格填充 時,系統必須分配新的內存空間到 的行。

希望它可以幫助