dedalux (Normal User)
Pro
Messaggi: 155
Iscritto: 14/02/2009
|
Sera a tutti e buon fine settimana.
Dunue volevo chiedervi un'informazione e un aiuto
in un programma ho personalizzato dei controlli button abbinandoci un'immagine che cambia in base alla posizione del mouse (enter, leave, down, up) pero, tenendo aperto il taskmanager mi sono accorto che la memoria occupata dal programma aumenta facendo cambiare l'immagine ai pulsanti, ossia se passo sopra ad un pulsante col mouse che l'immagine diventa tipo piu chiara l'applicazione viene ad occupare 200kb in piu e questo ogni volta.
Mi chiedevo se la cosa è normale, se ho sbagliato qualcosa..
Come soluzione avevo pensato a creare una dll in cui inserire le immagini e richiamarle solo quando servono... In teoria, x quel poco che ne so di assemblies, il problema doverbbe risolversi, ma non saprei come inserircele. Sapreste consigliarmi come e/o consigliarmi un'articolo dove documentarmi sulle dll?
Grazie mille siete mitici!
|
|
manvb.net (Member)
Guru
Messaggi: 663
Iscritto: 28/01/2008
|
Con che codice cambi le immagini dei buttons? Da dove prendi le immagini? Come le carichi? Il fatto che aumenti ogni volta la memoria non è normale, evidentemente crei ogni volta una nuova istanza scartando quelle vecchie(che vanno ad occupare memoria), comunque non ti preoccupare, la memoria non cresce più di tanto, se ne occupa il Garbage Collector! Comunque dovresti postare un po di codice per capire meglio il problema!
Ps. Lascia perdere le dll che in questo caso non c'entrano un tubo(l'immagine o la carichi da file o da risorsa(che è sempre un file) sempre un immagine è!)
Ultima modifica effettuata da manvb.net il 06/09/2009 alle 1:07 |
|
dedalux (Normal User)
Pro
Messaggi: 155
Iscritto: 14/02/2009
|
Ok gia smentita la mia teoria dll (premesso che non ne sapevo un tubo :rofl
posto il codice che è una stupidaggine, da li si capisce tutto
questo in un modulo insieme agli altri casi, MouseDown, MouseUP, MouseLeave
Codice sorgente - presumibilmente VB.NET |
Public Sub btnMEnter(ByVal btntarget As Button) If btntarget.Enabled Then btntarget.BackgroundImage = My.Resources.Co_Evid btntarget.ForeColor = Color.FromArgb(215, 235, 255) End Sub
|
questo in ogni signolo pulsante nell'evento corrispondente
Codice sorgente - presumibilmente VB.NET |
Private Sub btnLista_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnLista.MouseEnter btnMEnter(btnLista) End Sub
|
se ci sono accorgimenti o critiche vi sarei grato di segnalarli..
grazie Ultima modifica effettuata da dedalux il 06/09/2009 alle 18:24 |
|
manvb.net (Member)
Guru
Messaggi: 663
Iscritto: 28/01/2008
|
Non stai usando un immagine ma un colore, dovresti assegnare il colore alla proprietà BackColor non BackgroundImage!
Ultima modifica effettuata da manvb.net il 06/09/2009 alle 19:21 |
|
dedalux (Normal User)
Pro
Messaggi: 155
Iscritto: 14/02/2009
|
Mmm credo tu abbia letto male, o forse non riesco a comprendere quello che vuoi spiegarmi, potresti essere piu chiaro?
|
|
manvb.net (Member)
Guru
Messaggi: 663
Iscritto: 28/01/2008
|
Codice sorgente - presumibilmente VB.NET |
Public Sub btnMEnter(ByVal btntarget As Button) If btntarget.Enabled Then btntarget.[b]BackColor[/b] = My.Resources.Co_Evid btntarget.ForeColor = Color.FromArgb(215, 235, 255) End Sub
|
|
|
dedalux (Normal User)
Pro
Messaggi: 155
Iscritto: 14/02/2009
|
O.o ma io è proprio l'immagine del pulsante che cambio
Edit: quel Co_Evid è l'immagine del pulsante con un riflesso disegnato, Co_Evid.png
non sono cosi imbranato
Ultima modifica effettuata da dedalux il 06/09/2009 alle 22:43 |
|
manvb.net (Member)
Guru
Messaggi: 663
Iscritto: 28/01/2008
|
Ops, scusa, avevi ragione prima ho letto male il sorgente(avevo capito che co_evid fosse un colore)!
Comunque, per evitare l'aumento di ram potresti creare una variabile globale di tipo Image e all'avvio del programma assegnargli la risorsa. Poi ti basterebbe assegnare alla backgroundimage la variabile globale(sarebbe un asseganmento di references, quindi senza creazione di istanza) invece che la risorsa.
|
|
dedalux (Normal User)
Pro
Messaggi: 155
Iscritto: 14/02/2009
|
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...
|
|