Newsgroup: it.comp.lang.visual-basic
Titolo: Array di controlli

Dovendo inserire in una form 150 label, dal punto di vista della velocita'
e risparmio memoria, e' meglio inserire un array di label? o non
ci sono differenze sostanziali?
thx
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 thx
Credo che sia più che altro una scelta di comodità e non velocità,
io personalmente
farei un array di label e le caricherei tutte a runtime visto che sparare
150 label su un form a manina non mi sembra molto comodo
anche se facendolo a manina via ide il tutto dovrebbe essere più veloce
durante il caricamento, perche vb
non deve referenziare e dereferenziare 150 puntatori ad oggetti(controlli).
dal punto di vista dell'occupazione di memoria è lo stesso perche in ogni
caso vengono creati 150 controlli indipendenti ma nel primo caso ci sono
anche 150*32 bit di dati per i puntatori.
Io cosi credo, poi se sbaglio mi correggerete
ciao
Lorenzo


Mi autosmentisco,
da una ricerca più approfondita risulta che quando vb alloca gli array di
controlli
questi utilizzano meno memoria dello stesso numero di conotrolli istanziati
direttamente
perche VB riesce ad ottimizzare le parti comuni di codice anche se c'e'
un'incremento di memoria impiegata per
l'uso dei puntatori.
Ovvero la memoria usata è inferiore ma la velocità ne risulta penalizzata,
come credevo ,nella gestione dei singoli controlli.
http://www.vb-helper.com/perform.htm
"A control array containing 10 controls usees less memory than 10 individual
controls"
Cioè:
se sono controlli su cui non ti serve intercettare eventi (per esempio solo
visualizzare) senza click o altro
ti conviene l'array altrimenti ti conviene istanziarli a manina.
Ciao
Lorenzo

 ti conviene l'array altrimenti ti conviene istanziarli a manina.
Pero' la domanda di Fly credo fosse un'altra: appurato che voglio usare un
array di 150 controlli, e' piu' conveniente crearli tutti in design oppure
tutti a runtime?
La risposta credo sia: da un punto di vista della memoria e' del tutto
indifferente, dal punto di vista delle prestazioni e' leggermente piu' lenta
la seconda in fase di caricamento della form (o dovunque lui decida di
mettere il ciclo che fa il Load dei vari elementi), da un punto di vista
della comodita' e meglio la prima, specie se i 150 controlli devono essere
disposti secondo un qualche schema ordinato
Ciao
--
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown

 disposti secondo un qualche schema ordinato
Manco pe' gnente!
Intanto: 
Un array di controlli è più leggero come ha già scoperto Lorenzo;
Caricarli in design time è un lavoro da minatori
Caricarli in runtime secondo uno schema ordinato si può
(es: cicla e controlla la posizione di ogni lemnro rispetto al
precendente,
e intanto conta qunati ne stai mettendo sulla riga....)
Inoltre non è detto che debba essere un unico array dio 150 controlli:
potresti
anche fare 3 array di 50 controlli l'uno. Inoltre, se hai il primo
elemento
sul form, puoi usare l'istruzione load per i seguenti, ed intercettare
tutti gli
eventi distinguendo gli elementi per indice (ma si stava parlando 
di label, no? Che eventi vorresti gestire?I click sulle medesime?).
Oppure puoi usare una super tecnica spaziale assai incasinata che
tutavia
genera array di controllli con eventi. La trovi qui -ma bada: è un po'
intricata...
http://www.vb2themax.com/HtmlDoc.asp?Table=Articles&ID=270
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 wrote in message
news:ec7924f5a6c5befd17d...@mygate.mailgate.org
oltre a questo
 
http://www.vb2themax.com/HtmlDoc.asp?Table=Articles&ID=270
un altro esempio è qui
http://www.codeguru.com/forum/showthread.php?s=&threadid=20445&highlight=commandbuttons


 Un array di controlli è più leggero come ha già scoperto Lorenzo;
Temo che non ci capiamo... non stavo questionando la differenza tra array di
controlli e 150 controlli distinti (che, grazie, gia' conosco...)
Lorenzo dice:
"farei un array di label e le caricherei tutte a runtime visto che sparare
150 label su un form a manina non mi sembra molto comodo
anche se facendolo a manina via ide il tutto dovrebbe essere più veloce
durante il caricamento, perche vb non deve referenziare e dereferenziare 150
puntatori ad oggetti(controlli)."
Ora quello che leggo qui e': APPURATO CHE FACCIO UN ARRAY cosa cambia tra
metterli a manina oppure a runtime? questo e' quello a cui ho risposto...


 metterli a manina oppure a runtime? questo e' quello a cui ho risposto...
allora, dimmi: 
come li metti a mano? Copi e incolli e poi posizioni per 149 volte?
Ciao


 come li metti a mano? Copi e incolli e poi posizioni per 149 volte?
se proprio ci tieni:
Immagina di dover fare un qualcosa di "ordinato" come dicevo, tipo griglia
10x15 o cose del genere...
Crei la prima label, imposti l'aspetto che ti serve, quindi copy&paste per
generare l'array e il secondo elemento... incolli altre 3, affianchi e hai i
primi 5 elementi della riga: tempo netto 45 secondi
Selezioni i 5 elementi, c&p e li affianchi a destra del primo gruppo,
completando le 10 colonne: tempo netto 5 secondi
Selezioni la riga da 10, c&p e la posizioni sotto la prima, ripeti un paste
e metti la terza sotto la seconda per avere le prime tre righe: tempo netto
10 secondi
Selezioni le tre righe create, c&p per 5 volte, posizionando il blocco da
tre sotto il precedente: tempo netto 15 secondi
Totale: 75 secondi, e hai la tua griglia da 0 a 149 con gli elementi
perfettamente ordinati (nei c&p fatti in blocco, VB genera i nuovi indici
degli array sempre left-right, top-down)
Quindi, ripeto, come dicevo a Lorenzo: se vuole farlo "comodo", il che' non
vuol dire migliore, solo "comodo", puo' farlo a mano con l'editor senza
nessuna penalizzazione in termini di memoria o prestazioni, se vuole farlo
"controllato" si fa la sua bella routine di caricamento a runtime pagando un
(irrisorio, tanto piu' se chiamata e' una tantum durante Form_Load) overhead
in caricamento
Questo e' quanto...


 
Bravo. 
Adesso il capo ti dice di riposizionare il tutto in modo diverso.
Che fai?


 Che fai?
con 150 controlli su un form e' una rogna in ogni modo.
se li carichi a runtime, devi cmq rivedere tutti i loop e prob le
coordinate.
l'unica situazione in cui il runtime imho e' preferibile -- escludendo
ovviamente il superamento del numero di controlli di un form -- e' quando
hai uno schema semplice, es. n coppie label-txtbox una sotto l'altra.
ma se devi giostrare nelle due dimensioni, e' spiacevole comunque.
ciao

 Che fai?
Senti, se vuoi avere ragione dimmelo, perche' cosi' andiamo avanti
all'infinito; io array da 150 controlli, per fortuna, non ne ho e nemmeno ci
tengo ad averne; le form dinamiche che devo generare le faccio via codice,
perche' nemmeno so a priori quanti controlli mi servono, lui pero' voleva
sapere che differenza c'e' tra metterlo a mano e a runtime, gliene ho fatte
presenti alcune.
Ho detto che e' il modo migliore? no, non l'ho detto... ho detto che il tuo
sistema e' sbagliato, o lungo, o difficile da scrivere? nemmeno
ti incollo quello che ho appena scritto, che forse non hai letto:
"Quindi, ripeto, come dicevo a Lorenzo: se vuole farlo "comodo", il che' non
vuol dire migliore, solo "comodo""
E' sufficientemente chiaro?
Ciao


 Senti, se vuoi avere ragione dimmelo
[...]
LOL!
Ok, hai decisamente ragione: la pianto e chiedo scusa
(di norma non insisto cosě...si vede che mi sto rimbambendo...)
Ciao!
