Lettura file moooolto lunghi

giovedì 05 giugno 2008 - 13.49

willy_80 Profilo | Senior Member

Ciao a tutti,
sto analizzando dei files molto lunghi ovvero 70-100 mila righe, ogni riga contiene una terna di valori X,Y,Z.
Leggo la riga, separo le tre coordinate e le scrivo ognuna nella listbox di destinazione: ListX , ListY e ListZ per poter poi eseguire i successivi calcoli ed elaborazioni.
Questo processo dura circa 30-40 secondi, è possibile in qualche modo accelerare il tutto magari utilizzando oggetti diversi o istruzioni diverse ?

Il file è scritto così:

X319.55Y-212Z-160.981
X318.75Y-212Z-161.011
X318Y-212Z-161.652
X317.2Y-212Z-162.323
X315.65Y-212Z-160.981
X314.85Y-212Z-161.347
X314.1Y-212Z-161.561
[...]

Separo i valori così:

FileOpen(1, FileName, OpenMode.Input)
Do While Not EOF(1)
Lettura=LineInput(1)
PosY = InStr(1, Lettura, "Y", Microsoft.VisualBasic.CompareMethod.Text)
PosZ = InStr(1, Lettura, "Z", Microsoft.VisualBasic.CompareMethod.Text)
QX = Val(Mid(Lettura, 2, PosY - 1))
QY = Val(Mid(Lettura, PosY + 1, PosZ - 1))
QZ = Val(Mid(Lettura, PosZ + 1, Len(Lettura) - 1))
ListX.Items.Add(QX)
ListY.Items.Add(QY)
ListZ.Items.Add(QZ)
Loop

freeteo Profilo | Guru

ciao,
potresti usare una regex per tirare fuori i valori di "X,Y,Z" ma cmq nel tuo codice lavori per indice quindi non dovrebbe cambiare di molto e poi la stringa da parsare è corta.

Potresti però provare a sospendere il paint delle listbox finche le stai riempiendo, il che è una buona norma e può fare la differenza quando fai tante operazioni su un Controllo grafico come la listBox.
Perciò prova con:

SuspendLayout() ...ciclo riempimento listbox.... ResumeLayout()

che sono 2 metodi sia della form che della listbox, quindi o li metti della form (cosa che ti consiglio io) oppure li puoi chiamare per ognuna delle 3 listbox.
Prova a vedere se qualcosa guadagni.


ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5