Newsgroup: it.comp.lang.visual-basic
Titolo: out of memory

Ho una applicazione scritta usando una macchina con XP, in essa ci sono
circa 600 textboxes caricate in fase di esecuzione con "load", sulla
macchina usata per lo sviluppo tutto funziona bene, quando cerco di
installare la stessa applicazione su un PC con W98 mi si verifica un
evento strano, "out of memory", la quantita' di memoria e' la stessa
sulle due macchine (128MB), ho provato anche su altre ma stessa
storia...
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 circa 600 textboxes caricate in fase di esecuzione con "load", sulla
600 textbox?
e le hai messe tutte in un finestra ?   :))))))
magari se ci dici cosa fa la tua applicazione si puo trovare un altro
metodo......
caricare 600 textbox è assurdo :))
ciao


.. ma la gestione della stessa no!
W98 ne sa usare ottimizzata molto meno di XP e poi cosa carichi tu con xp e
gli altri con w98 all'avvio delle macchine?
PS: non sono un po' troppe 600 textbox?
non puoi spezzarle in più + form residenti una alla volta in memoria?
ciao acia

 storia...
600 textbox sono tante, ma a me non sorprende (ho finestre con più di 500
controlli e mi servono tutti).
Ti consiglierei comunque di creare un textbox "padre" con Index 0 e
assegnare a tutti gli altri lo stesso nome e il relativo indice progressivo.
Poi tratterai il tutto con Text(0), Text(1), ..., Text(599). Per maggior
leggibilità (ma con un certo spreco di memoria) potresti anche assegnare
delle costanti con un nome "parlante" e il relativo valore corrispondente
all'Index in modo da riferirti ai vari oggetti con, per sempio,
Text(codice), Text(descrizione), Text(quantita), etc. Per VB, in un certo
senso, è come se ci fosse un unico controllo e questo può ridurre eventuali
problemi di memoria.

Ci sono 8 routines cosě (cambia solo la posizione)
pos = 0
For i = 1 To 96
Load MyTXTBOX(i)
pos = pos + 264
If ((i - 1) Mod 12) = 0 Then pos = pos + 142
MyTXTBOX(i).Move 3960, pos
MyTXTBOX(i).Visible = True
MyTXTBOX(i).ZOrder (0)
MyTXTBOX(i).Locked = True
Next i


Mi sembra di aver fatto proprio cosě...
pos = 0
For i = 1 To 96
Load MyTXTBOX(i)
pos = pos + 264
If ((i - 1) Mod 12) = 0 Then pos = pos + 142
MyTXTBOX(i).Move 3960, pos
MyTXTBOX(i).Visible = True
MyTXTBOX(i).ZOrder (0)
MyTXTBOX(i).Locked = True
Next i


 > storia...
Probabilmente la memoria che si esaurisce non è la RAM, che attraverso lo
swap può diventare immensa, e sicuramente non viene messa in crisi da dei
controlli come le textbox, anche se tante.
E' molto più probabile che il problema risieda nella memoria User o Gdi, che
per motivi di indirizzamento è rimasta fissata a 64KB, quando oramai con
tutti i colori che si usano ne servirebbe di più.
C'è parecchia roba su MSDN sul problema.
In linea di massima:
- Non cambiare i colori ad alcuni controlli in design time. Lasciali col
colore originale e cambialo nel form_load
- Occhio all'uso di finestre dos
- Ridurre l'uso di show e hide di form e controlli
A seconda del singolo controllo, poi, ci possono essere problematiche
diverse.
Purtroppo la User e la Gdi non vengono rilasciate sempre correttamente, per
cui ci si può trovare a saturare tale area molto rapidamente. Esistono tool
(mi sfugge il nome, ma su tucows o astalavista dovresti trovarne facilmente)
che tengono monitorata tale memoria.
Ciao
Alberto

Si so del problema 64k il mio dilemma e' se si tratta di questo 
(molto probabilmente) la gestione avviene in modo differenziato 
su XP ??
Qualche service pack ha risolto il problema ??
Ho provato anche a spezzare diverse routine ma niente...


 su XP ??
Sinceramente non ne ho idea.
Avevo perņ sentito che l'indirizzamento sarebbe prima o poi passato da 16bit
(da cui 64KB), a 32bit. Forse questo passaggio č avvenuto proprio con XP.
Ciao
Alberto

 (da cui 64KB), a 32bit. Forse questo passaggio è avvenuto proprio con XP.
afaik, almeno da nt4 la gestione gdi e' decisamente migliore sugli nt (non
credo che ci sia il limite dei 64k).
almeno, con nt4ws e 2k io non ho piu' avuto quegli annerimenti di tutte le
icone che quando mi giravo dir di icone con win9 capitavano ogni 5 minuti,
costringendo al riavvio o almeno a rifare la cache con microangelo.
certo che 600 txt -- mi chiedo anche solo come riesci a disporli :)
ciao, a.

in fase di esecuzione...
pos = 0
For i = 2 To 96
Load myTXTBOX(i)
pos = pos + 264 ' ...........GUARDA QUI...
If ((i - 1) Mod 12) = 0 Then pos = pos + 142 ' .............E QUI...
myTXTBOX(i).Move 2640, pos ' ............POI ANCHE QUI...
myTXTBOX(i).Visible = True
myTXTBOX(i).ZOrder (0)
myTXTBOX(i).Locked = True
Next i



Scusa se mi sono curioso....
ma da un'occhiata al codice che hai postato...
vedo 12 sovrapposizioni di textbox e mi sembrano anche molto piccoline
  tutto questo mi lascia pensare che un approccio diverso al problema
consentirebbe una gestione piu' leggera anche per la ram
e.g. usare piů form... usare controlli piu avanzati della famiglia
griglie...
se ti va e vuoi postare lo scopo del tuo programma credo che indicazioni per
l'aggiramento ne arrivino un bel po'.
ciao
Acia

Ho pensato anche io in fase di progettazione di utilizzare controlli
tipo
DBGrid ecc. ma avevo la necessita' di gestire eventi quali il Drag&Drop,
i colori diversi, ecc.
Qualcosa di molto simile ad una agenda...
Se hai suggerimenti li accetto, ma considera che praticamente dovrei 
riscrivere questa applicazione...


 circa 600 textboxes [...] "out of memory"
Potrei dire una gigantesca fesseria, ma... provato con i windowless? Se non
sai cosa sono cerca tra i vecchi post. Ma sinceramente non so se possono
aiutarti.
Ignazio

Qualcosa di molto simile ad una agenda...
Ti serve almeno una flexgrid: ti fa tutte quelle belle cosine che hai detto
e altro ancora ;-)
-- 
ciao, hal