Newsgroup: it.comp.lang.visual-basic
Titolo: [VB.NET] Prestazioni

Ciao a tutti,
ho un dubbio che mi "assilla"
Programmo da tempo in vb e sto prendendo in seria considerazione il
passaggio a .NET
ma quello che mi lascia perplesso sono le prestazioni.
Per effettuare una semplicisima prova ho fatto due procedure una in vb6
l'altra in 
vb.net
in pratica in un form c'e' un solo pulsante che al clic effettua un
ciclo for con un numero di iterazioni impostabili dall'utente (tramite
textbox)
con all'interno (del ciclo) questa espressione:
in vb6
for iconta = 1 to val(text1.text)
     ris = ris + iconta * 0.001
next
in 
vb.net
for iconta = 1 to val(text1.text)
    ris+ = iconta * 0.001
next
quindi una cosa banalissima.
acquisisco il tempo prima dell'inizio del ciclo e dopo la sua fine
e in un msgbox mostro i due tempi
compilo entrambi i progetti e creo l'eseguibile per il prg fatto in vb6
e l'eseguibile per il progetto .NET (in modalità rilascio)
ebbene se il programma vb6 impiega 10 secondi per fare n cicli, quello
.NET per fare lo stesso numero di cicli impiega 30 secondi, IL TRIPLO!
Ora , mi rifiuto di credere che questa sia la normalità.
Sicuramente sto sbagliando qualcosa ma non so cosa. Avete fatto prove
analoghe? Consigli?
Grazie a tutti.
Stefano
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 in vb6
dim iconta as Long
dim vm as Long
dim ris as Long
vm=val(text1.text)
for iconta = 1 to vm
     ris = ris + (iconta * 1)
next
Adegua il tutto per NET e riprova. Poi, se vuoi, facci sapere se cambia
qualcosa. Grazie.

Utilizzando 100000000 come valore questo codice sul mio PIII 600 impiega 8
secondi, quale valore hai usato?
 Dim Ora As Int32 = DateTime.Now.Second
      Dim iConta As Double, ris As Double
      For iConta = 1 To Val(TextBox1.Text)
         ris += iConta * 0.001
      Next
      Console.WriteLine(DateTime.Now.Second - Ora)
HTH
-- 
Corrado Cavalli [Microsoft MVP]
UGIdotNET - 
http://www.ugidotnet.org

Faccio un po di prove con numeri e configurazioni dopodichč
posto i risultati.
ciao e grazie


 posto i risultati.
VB6 SP5, Pentium Celeron 1.06, 256Mb, XP Pro (senza SP1):
Dim iconta As Long
Dim vm As Long
Dim ris As Double
vm = 100000000
ti = Timer
For iconta = 1 To vm
     ris = ris + (iconta * 1)
Next
MsgBox Timer - ti        '<<<<< 11,14
ti = Timer
For iconta = 1 To vm
     ris = ris + (iconta * 0.001)
Next
MsgBox Timer - ti        '<<<<< 10,21

Ciao a tutti,
vi posto i risultati delle mie prove.
Configurazione di prova:
Athlon 900, 384Mb RAM Windows XP Prof. (No SP)
VB.NET
 + framework sp1
VB6 +sp5
1.000.000.000 (un miliardo) di iterazioni
VB6: 21"
VB.NET
: 55"
Ma poi ho scoperto l'arcano,
in effetti ho fatto una boiata.
la variabile contatore che ho usato in 
vb.net
 l'ho dichiarata int64
dichiarandola invece int32 (corrispondente al long di vb6) i risultati
sono stati questi:
VB6: 21"
VB.NET
: 55" (int64)
VB.NET
: 14" (int32)
sempre con la compilazione in release mode.
meno male!!!!!
grazie a tutti.
se volte fare altri tipi di confronti postate (anche in privato)
ciao a tutti e grazie


 
VB.NET
: 14" (int32)
Int64 è una variabile a 64 bit
dalla guida in linea:
Attenzione L'assegnazione di un valore a 64 bit su un computer Intel a 32
bit non è un'operazione atomica.
Una variabile per processori a 64 bit o per due a 32 bit ?
giuseppeD

 giuseppeD
Grazie per la precisazione,
in effetti sono stato un po superficiale a non guardare immediatamente
nella
guida.
Ciao
