La listbox ᅵ cosᅵ lenta ?
la listbox e la textbox le popolo cosᅵ:
lstprocess.items.add(Pid & " " & ProcName)
txtVerifica.text = txtVerifica.text & Pid & " " & ProcName
Boh.
Grazie, Alverman
La sfera di cristallo è a lucidare, "Boh" mi sembra la risposta giusta
Tutto quello che si vede dal tuo codice è che aggiungi una riga di
testo al ListBox, e una al TextBox...
Qualcosa sbagli.... con questo esempio, vengono caricati 1000 elementi in
meno di un secondo
For i As Integer = 1 To 1000
ListBox1.Items.Add(New ListItem(String.Format("{0:0000} - Testo di prova
generato il {1}", i, Now), i))
Next
Cerca di scrivere codice un p� pi� .NET like ;-)
txtVerifica.Text &= String.Format("{0} {1}", Pid, ProcName)
--
Ciao, Vincenzo
> Qualcosa sbagli.... con questo esempio, vengono caricati 1000 elementi
in
> meno di un secondo
>
> For i As Integer = 1 To 1000
> ListBox1.Items.Add(New ListItem(String.Format("{0:0000} - Testo di
prova
> generato il {1}", i, Now), i))
> Next
>
In effetti sbagliavo io
> Cerca di scrivere codice un pᅵ piᅵ .NET like ;-)
>
> txtVerifica.Text &= String.Format("{0} {1}", Pid, ProcName)
>
eh eh sto iniziando :)
Grazie, Alverman
> txtVerifica.Text &= String.Format("{0} {1}", Pid, ProcName)
Meglio ancora:
'immagino manchi anche un ritorno a capo in fondo
txtVerifica.SelectedText = String.Format("{0} {1}", Pid, ProcName)
Senza riconcatenare tutto il testo, molto più veloce
Allora si potrebbe usare l'oggetto stringbuilder per tutte le operazioni e
poi passare il suo contenuto alla casella di testo.
Ciao, Vincenzo
Ahimè no
La costruzione della stringa, in se, sarebbe più veloce, ma siccome
lui vuole vedere lo stato di avanzamento a video, sarebbe costretto a
ricopiare tutto il testo dallo stringbuilder al textbox ad ogni
iterazione.
A quel punto sarebbe nettamente controproducente a livello di
prestazioni e in più avrebbe anche problemi di refresh
Confronta queste due versioni (una form, un textbox multiline, due
bottoni)
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object , ByVal e
As System.EventArgs) Handles Button1.Click
Dim rnd As New Random
Dim start As Long
Dim elapsed As TimeSpan
Dim n As Integer
TextBox1.Clear()
start = Now.Ticks
For i As Integer = 1 To 1000
n = rnd.Next()
TextBox1.SelectedText = String.Format("Numero {0}{1}", i,
Environment.NewLine)
Next
elapsed = New TimeSpan(Now.Ticks - start)
Button1.Text = elapsed.TotalMilliseconds.ToString
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button2.Click
Dim rnd As New Random
Dim start As Long
Dim elapsed As TimeSpan
Dim n As Integer
Dim sb As New System.Text.StringBuilder(10000)
TextBox1.Clear()
start = Now.Ticks
For i As Integer = 1 To 1000
n = rnd.Next()
sb.AppendFormat("Numero {0}{1}", i, Environment.NewLine)
TextBox1.Text = sb.ToString
'nota che questo, nell'altro caso, non serve
TextBox1.Refresh()
Next
elapsed = New TimeSpan(Now.Ticks - start)
Button2.Text = elapsed.TotalMilliseconds.ToString
End Sub
End Class