Newsgroup: it.comp.lang.visual-basic
Titolo: [?] ProgressBar = progamma piu' lento

Ciao a tutti.
Mi sapreste dire come mai la ProgressBar rallenta, e di tanto, l'esecuzione
del programma?
Mi spiego:
Estraggo da un db SQL un certo numero di record (oltre 26000) che devo
salvare in un file di testo. Per sapere quando finisco posso fare in tre
modi:
A) Far apparire una MsgBox quando esce dal Loop che mi avverte che ha
finito;
B) (e piu' bello) Mettere una ProgressBar con la proprieta' Scrolling su
ccScrollingStandard (magari su un altro Form), con il valore Min a 0 e il
valore Max al numero di record estratti (i 26000 e passa di prima) in modo
da avere un riscontro visivo del punto in cui e' arrivato il Loop;
C) (e piu' bello ancora) Mettere la stessa ProgressBar, ma con la proprieta'
Scrolling su ccScrollingSmooth (magari sempre su un altro Form e con i
valori Min e Max come sopra).
Se misuro il tempo (ma si vede anche a occhio) che passa dal momento
immediatamente precedente all'ingresso del Loop al momento immediatamente
successivo all'uscita del Loop (calcolato salvando in una variabile X il
valore di Timer prima del Loop e visualizzando all'uscita il tempo
intercorso facendo Timer - X), mi accorgo che nei tre casi di prima ottengo:
A) circa 6-7 secondi
B) circa 15-16 secondi
C) circa 26-27 secondi
Come mai? Non e' possibile avere le stesse prestazioni che ho in A), ma
avendo la ProgressBar come nel caso C)?
Attendo fiducioso i vostri consigli.
Nel frattempo grazie 1000.
--
Saluti
Michele
mic...@iol.it
oppure
mc3...@mclink.it

 [snippone]
Indipendentemente dal tuo caso particolare, SI!. Io ho scritto un programmino
per crittare file che elabora un file da 15k in 5 secondi senza pbar, con la
pbar ne impiega 25. Questo succede anche impostando DoEvents solo ogni qualche
migliaio di iterazioni e anche usando un Timer. Chissà perchè...
dario...@iol.it
http://dariobrunocorti.freeweb.org

 wrote in message
Vzkp3.47625$Wv3.1...@typhoon.libero.it...

Perche' uno dei punti meno performanti di VB e' proprio la gestione grafica
dell'interfaccia utente (creazione e refresh di forms e controlli).
--
Roal Zanazzi
z...@iol.it

Nel frattempo grazie 1000.
Come ha gia' detto Roal in un altro messaggio temo che non sia possibile; la
cosa migliore che puoi fare e':
1. Limitare i refresh della ProgressBar: invece di impostare min=0 e
max=NumeroRecords prova con min=0 e max=NumeroRecords\1000, aggiornando quindi
la PBar ogni 1000 iterazioni piuttosto che ogni volta; le prestazioni sono
comunque peggiori ma in minor misura; facendo qualche prova puoi trovare anche
un valore diverso che ti dia il miglior compromesso... tieni conto che il caso
B) va piu' veloce proprio per questo motivo, visto che con ccScrollingStandard
la PBar aggiunge una "tacca" solo ogni tot valori
2. Fare semplicemente una "formina" statica del tipo "Attendere prego..."; so
che non e' quello che vuoi ma se le prestazioni devono avere la precedenza temo
sia il modo migliore.
Ciao
--
Luca Dormio
l...@sig-la.com
ldo...@tin.it


Forse mi sbaglio, però mi ricordo di aver sostituito una progressbar che
rallentava molto una routine di ordinamento con un controllo picturebox (o
image?) che poi aggiornavo ogni tot iterazioni con un'istruzione tipo
  picprogressione.line (0,0)-(larghezza, picprogressione.height), rgb(0, 0,
255), bf
che simula una progressbar continua, impostando "larghezza" con una proporzione
  larghezza : picprogressione.width = i : maxiterazioni
La routine risultava più veloce, forse perchè il picturebox è più rapido in
aggiornamento della pbar.
spero ti possa servire
dario...@iol.it
http://dariobrunocorti.freeweb.org

 ......



Invece di usare la progress bar provate semplicemente ad inserire nel
form una picture box (dandogli la forma di una progress bar ed il nome
nell'esempio PBar) e chiamate la funzione:
Public Sub PBar(Perc)
    Dim x!, w!, h!
 
    If Perc <= 0 Then
        fMainForm.PBar.Cls
 
    Else
        x = Perc
        x = x / 100
        w = fMainForm.PBar.Width - 20
        h = fMainForm.PBar.Height - 20
        fMainForm.PBar.Line (10, 10)-(x * w + 10, h - 10), _
                                          QBColor(1),BF
    End If
 
End Sub
dovete solo calcolare quando serve il valore percentuale da passare
alla funzione e chiamarla con PBar(valore percentuale calcolato)
A me risulta molto piu veloce della progress bar (e risparmiate un
controllo)
Bye, Luys
--------------------------
Luigi Lando
mailto : 
lu...@telemar.it
--------------------------
Make things as simple as
possible - but no simpler.
--------------------------


