PDA

Visualizza la versione completa : [Delphi 7] Interbase : errore nella Post


alanf1981
19-04-2004, 10:55
Ciao a tutti! Ho un problema con Interbase...
La mia applicazione è un servizio Windows e scrive molto spesso su una tabella Interbase.
Dopo 3-4 giorni che il processo continua, al momento di effettuare la Post sulla tabella x confermare l'inserimento di un nuovo record, mi dà un errore con la seguente eccezzione :
'Out of memory'

e da quel momento in poi ogni scrittura successiva fallisce!

cosa significa? Non è un problema di quantità di RAM (1GB basta e avanza)... :)

Aiuto!!! :dhò:
grazie mille!!!

:ciauz:

alka
19-04-2004, 11:53
Difficile diagnosticare il problema. Se ti viene restituito un errore Out of memory, significa che la tua applicazione ha dei "memory leak", cioè delle allocazioni di memoria (creazione di oggetti, disposizione di risorse) che non vengono deallocate al termine del loro utilizzo, magari riallocandole nuovamente nelle chiamate successive.

Il fatto di incrementare la RAM, sposta solo in avanti il punto critico in cui il programma andrà in blocco.

E' come avere un soffitto che perde acqua: aumentare le dimensioni del secchio che metti sotto a raccogliere le gocce significa solo posticipare il momento nel quale il secchio traboccherà, ma il vero problema è uno solo: chiudere la falla.

Senza uno stralcio di codice, è impossibile determinare quale possa essere l'origine del memory leak.

Magari hai semplicemente creato dei componenti dinamicamente di cui non esegui la Free e questa operazione viene iterata più volte saturando la memoria.

Prova a controllare il codice sorgente alla ricerca di eventualità di questo tipo...

Ciao! :ciauz:

alanf1981
19-04-2004, 12:25
Dici quindi che non è dovuto al metodo Post o a qualcosa col db? E' un errore di programmazione?

alka
19-04-2004, 12:28
Se il problema si verifica dopo 3-4 giorni di Post continuate, l'operazione stessa di Post e il DB non hanno apparentemente un problema (altrimenti si verificherebbe subito).

Il tipo di errore mi fa sospettare che vi sia da qualche parte un'allocazione continua di risorse che non vengano deallocate portando il programma a bloccarsi dopo qualche giorno; qualsiasi altro errore di tipo "sistematico" tendo ad escluderlo, altrimenti si verificherebbe subito o comunque entro breve tempo.

Ho un'applicazione che lavora con la posta elettronica e smista messaggi con allegati di dimensioni notevoli, lavora 5 giorni su 7, anche alla notte, ma non ho mai avuto problemi su Post o database di questo tipo (a riposo o a giochi fermi, la memoria occupata è sempre di 4~5 MB).

alanf1981
19-04-2004, 12:32
Ok grazie, ora riguardo il tutto!
Sai se esiste un modo in delhpi di fare una "pulitura" della memoria usata da un processo (ad esempio eliminare gli oggetti non referenziati da tanto tempo, ecc ecc)?

grazie mille!!!

alka
19-04-2004, 12:37
Originariamente inviato da alanf1981
Sai se esiste un modo in delhpi di fare una "pulitura" della memoria usata da un processo (ad esempio eliminare gli oggetti non referenziati da tanto tempo, ecc ecc)?

Purtroppo no. Delphi produce applicazioni Win32, il quale non è un ambiente di esecuzione "gestito" come ad esempio lo è il .NET Framework di Microsoft, pertanto è il programmatore a doversi occupare della distruzione esplicita degli oggetti creati e della memoria allocata.

Loading