2015-10-23 8 views
6

Quando sto caricando enormi quantità di dati nella memoria sotto forma di tabelle interne (centinaia di migliaia o addirittura milioni), dovrei pulire manualmente le voci aggiornando le tabelle interne non appena ho finito con loro?Devo aggiornare le tabelle interne quando ho finito con loro?

Suppongo che queste variabili vengano eliminate automaticamente una volta che lasciano l'ambito (vale a dire che il programma termina, un'istanza di classe viene liberata, ...). Ma se ho a che fare con programmi batch di lunga durata, ha senso liberare queste tabelle temporanee?

Fare ciò aumenta le prestazioni in modo evidente? O è l'unica ragione per fare questo per evitare di incappare nei limiti di memoria?

risposta

3

Ha senso rilasciare memoria inutilizzata, soprattutto se c'è un posto ovvio nel codice per farlo. È facile se si può semplicemente lasciare l'ambito (metodo) e fare in modo che il sistema elimini automaticamente tutte le variabili locali. Anche se si evita solo di incappare nei limiti di memoria, è già utile, inoltre, semplifichi la vita a tutti gli altri utenti del sistema.

+0

Solo una domanda: sarà vero impatto in termini di prestazioni, in qualche modo? – Christian

+1

@Christian Dipende se (e come) si accede alle tabelle. Una buona regola è: se accedi ai tavoli frequentemente, lasciarli crescere inutilmente è una cattiva idea. Se non si accede ai tavoli - beh, perché mantenere i contenuti al primo posto? – vwegert

3

Hai ragione quando esci da una subroutine o da un metodo per pulire le variabili.

Penso che i tavoli rinfrescanti siano una buona pratica, in effetti lo faccio la maggior parte del tempo, tuttavia, quando si tratta di grandi quantità di dati, utilizzo FREE invece di REFRESH.

Da this link:

Per garantire che la tabella stessa è stato inizializzato, è possibile utilizzare l'istruzione

REFRESH ITAB.

Questo vale sempre per il corpo del tavolo. Con REFRESH, anche il requisito di memoria iniziale per la tabella rimane riservato.

di rilasciare questo spazio di memoria, utilizzare l'istruzione

ITAB GRATIS.

È possibile utilizzare GRATUITAMENTE per inizializzare direttamente una tabella interna e liberare tutto il suo spazio di memoria, tra cui la memoria requisito iniziale, senza prima utilizzare il REFRESH o dichiarazioni chiare. Come REFRESH, FREEaccessi al corpo del tavolo, non all'area di lavoro del tavolo. Dopo un periodo di validità di , la tabella interna esiste ancora. Occupa ancora la quantità di memoria richiesta per la sua intestazione (attualmente 256 byte). Quando si ricarica la tabella, il sistema deve allocare nuovo spazio di memoria alle linee .

Speranza che aiuta

Problemi correlati