Oppure

Loading
06/09/09 22:18
dedalux
Perche praticamente ogni volta che assegno un valore nuovo a backgroundimage va a creare un nuovo spazio di memoria dove immagazzina l'immagine? quindi se faccio una variabile con ogni immagine e assegno la variabile ne creo solo 4 (mouseEnter, Leave, Down, Up) ?

come faccio x creare questa varibile con valore immagine? Non l'ho mai fatto...
aaa
06/09/09 22:53
manvb.net
E' semplice:
In uno spazio publico(fuori da ogni procedura, dentro la classe del form) della classe del form crei la variabile:

Dim img1 As Image = My.Resources.img1

Poi nella funzione che ti interessa metti:

button1.BackgroundImage = img1
aaa
06/09/09 22:56
dedalux
Mm dire semplice, ma se la funzione è in un modulo e la variabile nel form me la fa richiamare da li?

cmq ora domro che devo alzarmi parecchio presto domani, intanto grazie mille, domani rispondo!
notte :k:

edit: troppo curioso ho messo le varibili nel modulo e va..
la ram occupata sale solo se passo il mouse piu volte e di 10kb non piu di 200... xo sale... se vuoi ti mando l'eseguibile ci dai un'occhiata.. non che mi crei problemi ma la cosa un po mi lascia perplesso è un po devo essere mi infastidisce..
anche xk succede lo stesso con un form secondario che contiene un piccolo webbrowser, la ram occupata aumento della dimensione del documento, alla chiusura del form diminuisce ma nn torna come prima, ma sempre 2mb circa in piu, e idem per ogni volta che apro e chiudo.. boh

ora dormo va notte e grz ancora
Ultima modifica effettuata da dedalux 06/09/09 23:06
aaa
07/09/09 2:28
manvb.net
Tecnicamente ogni volta che istanzi una variabile usi memoria e alla fine della procedura la memoria viene marcata come restituibile, ma non viene realmente restituita finchè non c'è necessita di nuova memoria.
Ricordati che c'è sempre il Garbage Colletor che se ne occupa, quindi più di tanto non ti devi preoccupare.

Un programmatore c++ lo chiamerebbe Memory Leak (istanzi una variabile dinamica ma non la distruggi). Fortunatamente questo tipo di errore, che mangia ram a più non posso, non si verifica facilmente nei linguaggi .net, percè appunto interviene il GC che, solo in caso di necessità di memoria, rimuove quella istanziata ma non più utilizzata(Memory Leak)!
aaa
07/09/09 8:08
dedalux
Si infatti sapendolo non me ne preoccupo, come ho gia detto, ma chi usa il mio programma potrebbe dire "ma tu guarda quanto occupa" o "come sale la ram"...

Cmq chiarito che è meglio assegnare delle variabili creando cosi un'istanza sola, sembra sia normale un leggero aumento, lo è anche x il webbrowser? Perchè io all'evento Closed del form di navigazione richiamo GC.Collect() in teoria dovrebbe far pulizia.. o sbaglio?
aaa
07/09/09 9:30
manvb.net
Si tratta sempre di teoria, il GC ha suoi tempi e i suoi modi, non conviene forzarlo(comunque per eliminare definitivamente un'istanza, il GC deve fare molti Collect).
Piuttosto dovresti utilizzare Dispose() con le variabili che utilizzano molta memoria, il che bypassa il GC distruggendo direttamente gli oggetti!
Ultima modifica effettuata da manvb.net 07/09/09 9:38
aaa
07/09/09 10:19
dedalux
Beh il dispose c'era gia ma a livello di form.. Il codice che ho al momento è
Dispose()
        GC.Collect()


meglio in un altro modo?
aaa
07/09/09 10:56
manvb.net
Togli il GC.Collect e metti il dispose per ogni oggetto che occupi molta memoria!
aaa