la prima volta che eseguo questa routine (nella cartella ci sono un migliaio di files di testo) dopo avere acceso il PC:

codice:
For Each foundFile As String In My.Computer.FileSystem.GetFiles( _
            Path, FileIO.SearchOption.SearchAllSubDirectories, "*.txt")

    Dim fs As FileStream = New FileStream(foundFile, FileMode.Open, _
            FileAccess.Read, FileShare.Read)
    Dim sr As StreamReader = New StreamReader(fs)
    FileReader = sr.ReadToEnd
    sr.Close()
    fs.Close()

   (Elaborazione FileReader, poca roba, meno di un millisecondo)

Next
ci metto quasi 30 secondi

dalla seconda volta in poi, anche chiudendo il programma e riaprendolo, meno di un secondo!!

Ora, dato che "every time you change a String variable, you leave the existing String object allocated and create a new one" evidentemente la prima volta alloca nuova memoria per ogni FileReader letto e dalla seconda volta in poi sa già dove trovare i dati in memoria, senza bisogno di rileggere i dati da file, velocizzando enormemente le operazioni.

La cosa che trovo inspiegabile è che questa velocità 30 volte maggiore si realizza anche se chiudo e riapro il programma... comunque per carità, molto meglio così.

La domanda che rimane a questo punto è: qualche idea per velocizzare le operazioni già alla prima volta??

grz