Newsgroup: it.comp.lang.delphi
Titolo: OpenPictureDialog mangia memoria

Ciao a tutti,
                    ho riscontrato un problemino nella mia applicazione che
non mi piace per niente.
Un utente ha la possibilità di aprire delle immagini per poi compiervi delle
elaborazioni...
Il codice corrispondente è:
if OpenPictureDialog1.execute
    then
        begin
            ....................... operazioni sull'immagine
            ....................... salvataggio immagine
            ....................... free dell'immagine
        end;
dato che uso un oggetto di tipo tOpenPictureDialog quando viene cliccata
un'immagine viene creata
l'anteprima, prima che l'utente con doppio click o con il tasto open la apra
effettivamente,
con il risultato che una volta che si esce dal metodo execute rimane
alloccata un sacco di
memoria dedicata all'anteprima inutilmente e per di più se un utente apre
altre n immagini questa occupazione
im memoria continua a salire.
Come posso fare per evitare tutto ciò???
Saluti
Giò

 Come posso fare per evitare tutto ciň???
due domande:
1) come hai misurato l'occupazione di memoria? voglio sperare non attraverso
il task manager di W2K/XP.
2) "se un utente apre altre n immagini" che vuol dire? che ha chiuso la
dialog e poi riaperta per selezionare altre immagini? oppure e' sempre
rimasto nella dialog e sta "navigando", una per una, nella cartella immagini
e relative anteprime?
Ciao, Sandro

 e relative anteprime?
Vuol dire che ha chiuso la dialog e poi l'ha riaperta......

 Invece si..... di solito non va cosě male.
e' un valore puramente indicativo, quello. Win non fa il garbage collection
dell'heap in tempo reale (rallenterebbe il sistema), e spesso indica
occupazioni di memoria superiori a quelle effettive e che vanno ad aumentare
per il motivo di sopra.
Usa qualche tool professionale per misurare la memoria occupata
effettivamente dall'applicazione.
Ciao, Sandro

 effettivamente dall'applicazione.
Grazie mille, proprio non lo sapevo.
Giŕ che ci siamo mi potresti indicare un tool (magari free) per la misura
della memoria occupata dall'applicazione?
Grazie
Giň


Open Delphi Manual (
http://groups.yahoo.com/group/delphi_open_manual/
)

 esistono evidenti memory leak nel codice e altro ancora.
forse non hai letto con attenzione quanto ho scritto: WinXP non ricompatta
l'heap nel momento in cui tu liberi le risorse, lo fa "ogni tanto" (non so
bene in base a che criteri, forse quando la ram diminuisce sotto un certo
limite, o se la macchina e' in idle piu' di un tot di tempo); fino a quando
non lo fa, la memoria "liberata" dalla tua applicazione resta comunque
allocata al processo e impegnata dal sistema, col risultato che i mega nel
task manager crescono. E' chiaro che se parliamo di pochi KB non te ne
accorgi, ma se si iniziano a caricare immagini, a generare anteprime e a
fare task ram-intensive, si incorre in questo genere di problemi.
Gio': purtroppo non so consigliarti un monitor della memoria, e' da tempo
che non ne uso, ma una ricerca con Google dovrebbe portarti a risultati
interessanti, ne ho letto qua e la' parecchie volte.
Ciao, Sandro

dovrebbe esserlo?).
Infatti non lo è.  Windows non esegue *ALCUNA* garbage collection.
Il TM mostra i working set di ogni processo (che però non è preciso,
perché prevede pagine di 4K).  Il totale della memoria disponibile
viene però indicato in modo esatto (almeno stando a quanto riportato
dal Microsoft Resource Kit), perché calcolato sui byte e non sulle
pagine.