Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Dc e deallocazione memoria

Ciao a tutti,
ho un problema con un programma che sto costruendo, in cui utilizzo molta
grafica: errore 7 = out of memory...
preso come assunto che questo errore non dovrebbe *mai* verificarsi (almeno
io penso che se un programma e' fatto bene non dovrebbe succedere, aspetto
smentite), ho analizzato il mio prog, ho abbassato i limuti ai buffer,
cercato di fare tutte le operazioni grafiche sul momento, senza farle prima
e sbattere tutto in memoria... ma talvolta il problema si ripresenta. cosi'
penso di non aver proprio capito bene il funzionamento e soprattutto la
deallocazione dei device context (e conseguenti bitmap) che creo a runtime
per varie operazioni. vi spiego brevemente in cosa consiste il mio sistema:
ho fatto due classi: cDeviceContext e cBitmap. cBitmap utilizza la
CreateCompatibleBitmap per creare un'immagine della dimensione desiderata,
cDeviceContext usa CreateCompatibleDc per creare un dc virtuale.
cDeviceContext contiene i metodi SetBmp(cBitmap) e FreeBmp. Con SetBmp la
classe utilizza SelectObject per selezionare la bitmap passata sul dc e si
salva in una variabile l'handle della bitmap selezionata nel dc in
precedenza. In FreeBmp, sempre con la SelectObject, riseleziona nel dc la
bitmap originale.
entrambe le classi possiedono il metodo destroy (che viene chiamato anche in
Class_Terminate) che provvede ad eliminare dc o bitmap rispettivamente con
DeleteDC e DeleteObject.
Alla luce di tutto questo, secondo voi, dove sbaglio?
grazie, assa.

 Alla luce di tutto questo, secondo voi, dove sbaglio?
Probabilmente la memoria che ti si esaurisce č la GDI.
Esiste molta documentazione su MSDN su quali operazioni lasciano memory
leaks sulla GDI, soprattutto se sei un po' indietro con i Service Pack.
Ciao
Alberto

 leaks sulla GDI, soprattutto se sei un po' indietro con i Service Pack.
bene... un'altra domanda: dove posso trovare un monitor che mi mostri le
risorse GDI occupate? (l'errore non capita a me, se non vedo cosa realmente
occupo mi e' impossibile migliorare). Ho scaricato diversi monitor, ma
nessuno mi mostrava le risorse gdi (da windows2000).
grazie, assa.

 risorse GDI occupate?
Non ricordo proprio dove scaricai, un annetto fa, un tool che adesso non ho
più.
Credo su Tucows.Com o su Astalavista.Com
Ciao
Alberto

 grazie, assa.
Sotto windows 2000 "dovrebbero" essere illimitate... sotto win98 l'utility è
monitor di sistema mi pare... ma l'errore te lo da anche sotto w2k? :?

 monitor di sistema mi pare... ma l'errore te lo da anche sotto w2k? :?
no... ma e' il pc che uso per modificare il programma, quindi mi serve un
monitor che funzioni...
sul 2k c'e' il task manager che visualizza l'occupazione in memoria di ogni
processo, ma non ho trovato alcun riferimento alla memoria gdi (non so, e'
tutto compreso? come funziona?).
ho anche cercato su 
download.com
 e tucows, ma non ho trovato nulla che lo
faccia...
possibile che debba per forza avere win98 per il debug?
ciao, assa.

 faccia...
Siccome mi sembrava impossibile, sono andato su Tucows.Com, ho digitato
"gdi", ed ho trovato "MemCheck Pro 3.0" (shareware).
Tempo complessivo di lavoro: 2min'
Su Download.Com ne ho trovati addirittura 4 diversi, di cui due Free e due
Trial.
Ma tu cosa intendi per "ho anche cercato su 
download.com
 e tucows, ma non ho
trovato nulla"??
Ciao
Alberto

 trovato nulla"??
non so se mi ero spiegato, ma io parlo di windows 2000, notato che MemCheck
ecc. ecc. e' per 95/98/Me?
e su 
download.com
? dirai tu... stessa identica solfa, rispondo io...
se ti vengono in mente altre idee...
ciao, assa.
--
Sito Comune
http://www.it-lang-vb.net/

 se ti vengono in mente altre idee...
Prova su 
www.sysinternals.com
, se non c'č lě, non so.
Bye, G.