Newsgroup: it.comp.lang.visual-basic
Titolo: leggere file txt...

mi sono appena accorto che leggere un file txt da vbnet con MyReader è molto 
più lento che leggerlo da vb6 con le solite istruzioni "Open FileName For 
Input As #1"
il rapporto è 1 a 1000!!!
è possibile?oppure ho sbagliato qualcosa io? 

 č possibile?oppure ho sbagliato qualcosa io? 
Posta il codice che usi, comprese le operazioni che fai sul file.
-- 
news:it-alt.comp.software.openoffice : Il newsgroup dedicato a
OpenOffice.org, la suite open source di applicazioni per ufficio.
Scarica "OpenOffice.org 3, I suppose", molto di piů di semplici FAQ!
http://it.openoffice.org/doc/manuali/

 Posta il codice che usi, comprese le operazioni che fai sul file.
il codice non fa altro che leggere due file di testo e trasferire i dati 
sulle matrici.
poi scrive un terzo file di testo dopo aver fatto delle operazioni 
matematiche tra le matrici.
        Dim myStream As IO.Stream = Nothing
        OpenFileDialog1.Filter = "txt files (*.txt)|*.txt|All files 
(*.*)|*.*"
        OpenFileDialog1.FilterIndex = 2
        OpenFileDialog1.RestoreDirectory = True
        OpenFileDialog1.Title = "seleziona file SBET"
        If OpenFileDialog1.ShowDialog() = 
System.Windows.Forms.DialogResult.OK Then
            Try
                myStream = OpenFileDialog1.OpenFile()
            Catch Ex As Exception
                MessageBox.Show("Cannot read file from disk. Original error: 
" & Ex.Message)
            Finally
                ' Check this again, since we need to make sure we didn't 
throw an exception on open.
                If (myStream IsNot Nothing) Then
                    myStream.Close()
                End If
            End Try
        End If
        'legge SBET
        Dim sbet(3, 0) As Double
        Dim N As Integer = 0
        Using MyReader As New 
Microsoft.VisualBasic.FileIO.TextFieldParser(OpenFileDialog1.FileName)
            MyReader.TextFieldType = FileIO.FieldType.Delimited
            MyReader.SetDelimiters(" ")
            Dim currentRow As String()
            currentRow = MyReader.ReadFields()
            While Not MyReader.EndOfData
                ReDim Preserve sbet(3, N)
                Try
                    currentRow = MyReader.ReadFields()
                    sbet(0, N) = Val(currentRow(1)) 'distanza
                    sbet(1, N) = Val(currentRow(2)) 'x
                    sbet(2, N) = Val(currentRow(3)) 'y
                    sbet(3, N) = Val(currentRow(4)) 'z
                Catch ex As 
Microsoft.VisualBasic.FileIO.MalformedLineException
                    MsgBox("Line " & ex.Message & _
                    "is not valid and will be skipped.")
                End Try
                N = N + 1
            End While
        End Using
        OpenFileDialog1.Filter = "txt files (*.txt)|*.txt|All files 
(*.*)|*.*"
        OpenFileDialog1.FilterIndex = 2
        OpenFileDialog1.RestoreDirectory = True
        OpenFileDialog1.Title = "seleziona file Laser"
        If OpenFileDialog1.ShowDialog() = 
System.Windows.Forms.DialogResult.OK Then
            Try
                myStream = OpenFileDialog1.OpenFile()
            Catch Ex As Exception
                MessageBox.Show("Cannot read file from disk. Original error: 
" & Ex.Message)
            Finally
                ' Check this again, since we need to make sure we didn't 
throw an exception on open.
                If (myStream IsNot Nothing) Then
                    myStream.Close()
                End If
            End Try
        End If
        'legge punti laser
        Dim laser(3, 0) As Double
        N = 0
        Using MyReader As New 
Microsoft.VisualBasic.FileIO.TextFieldParser(OpenFileDialog1.FileName)
            MyReader.TextFieldType = FileIO.FieldType.Delimited
            MyReader.SetDelimiters(" ")
            Dim currentRow As String()
            While N < Not MyReader.EndOfData
                ReDim Preserve laser(3, N)
                Try
                    currentRow = MyReader.ReadFields()
                    laser(0, N) = Val(currentRow(0)) 'x
                    laser(1, N) = Val(currentRow(1)) 'y
                    laser(2, N) = Val(currentRow(2)) 'z
                    laser(3, N) = Val(currentRow(3)) 'echo
                Catch ex As 
Microsoft.VisualBasic.FileIO.MalformedLineException
                    MsgBox("Line " & ex.Message & _
                    "is not valid and will be skipped.")
                End Try
                N = N + 1
            End While
        End Using
        'rigenera file laser
        N = 0
        Dim dist, dist1, dist2, percDist, largh As Double
        Dim xa, xb, ya, yb, za, zb, xout, yout, zout, progOUT As Double
        Dim passo As Integer = 50000
        For I = LBound(laser, 2) To UBound(laser, 2) Step passo
            'Dim fs As New IO.FileStream((Mid(OpenFileDialog1.FileName, 1, 
Len(OpenFileDialog1.FileName) - 4) & Format(I, "00000") & ".txt"), 
IO.FileMode.CreateNew)
            Using sw As IO.StreamWriter = New IO.StreamWriter("D:\Documents 
and Settings\MarcoSalvatori\Documenti\lavori\lavori sineco\laser\utility\" & 
Format(I, "000000000") & "-" & Format(I + passo, "000000000") & ".txt")
                For J = I To Math.Min(I + passo, UBound(laser, 2))
                    Dim Max1 As Double = 10000000
                    Dim Max2 As Double = 10000000
                    Dim POS1 As Integer = 0
                    Dim POS2 As Integer = 0
                    For K = LBound(sbet, 2) To UBound(sbet, 2)
                        dist = (sbet(1, K) - laser(0, J)) ^ 2 + (sbet(2, 
K) - laser(1, J)) ^ 2
                        If dist < Max1 Or dist < Max2 Then
                            If Max2 < Max1 Then
                                Max1 = dist
                                POS1 = K
                                xa = sbet(1, K)
                                ya = sbet(2, K)
                                za = sbet(3, K)
                            Else
                                Max2 = dist
                                POS2 = K
                                xb = sbet(1, K)
                                yb = sbet(2, K)
                                zb = sbet(3, K)
                            End If
                        End If
                    Next
                    If POS1 < POS2 Then
                        dist1 = (laser(0, J) - xa) ^ 2 + (laser(1, J) - ya) 
^ 2
                        dist2 = (xb - xa) ^ 2 + (yb - ya) ^ 2
                        percDist = ((xb - xa) * (laser(0, J) - xa) + (yb - 
ya) * (laser(1, J) - ya)) / dist2
                        'Codice2out = Codice2(I)
                        xout = xa + percDist * (xb - xa)
                        yout = ya + percDist * (yb - ya)
                        zout = za + percDist * (zb - za) 'Z2(I)
                        progOUT = POS1 + percDist * (POS2 - POS1)
                    Else
                        dist1 = (laser(0, J) - xb) ^ 2 + (laser(1, J) - yb) 
^ 2
                        dist2 = (xb - xa) ^ 2 + (yb - ya) ^ 2
                        percDist = ((xa - xb) * (laser(0, J) - xb) + (ya - 
yb) * (laser(1, J) - yb)) / dist2
                        'Codice2out = Codice2(I)
                        xout = xb + percDist * (xa - xb)
                        yout = yb + percDist * (ya - yb)
                        zout = zb + percDist * (za - zb) 'Z2(I)
                        progOUT = POS1 + percDist * (POS1 - POS2)
                    End If
                    largh = Math.Sqrt((laser(0, J) - xout) ^ 2 + (laser(1, 
J) - yout) ^ 2)
                    Dim testo As String = ""
                    testo = progOUT & " " & largh & " " & laser(0, J) & " " 
& laser(1, J) & " " & laser(2, J) & " " & laser(3, J)
                    ' Add some text to the file.
                    sw.WriteLine(testo)
                Next
                sw.Close()
            End Using
        Next
        MsgBox("finito!!!")
 

 matematiche tra le matrici.
Non saprei, dovresti cercare di capire se c'č un collo di bottiglia, 
cioč qual č l'operazione piů lenta. Non č detto che sia la lettura e la 
scrittura del file. Prova con un progetto di esempio semplice che legge 
e scrive senza fare altro, in moda da cercare di isolare il problema.
A parte che se usi in costrutto Using dovrebbe essere inutile richiamare 
esplicitamente il metodo Close(), ma non credo che c'entri qualcosa.



sto facendo la stessa routine con una macro excel...è tutto più 
veloce...ogni singolo step!!!
mah!!