Ho il piacevole compito di elaborare come gestire i file di grandi dimensioni caricati nell'editor di script della nostra applicazione (è come VBA per il nostro prodotto interno per macro veloci). La maggior parte dei file sono circa 300-400 KB, che è un buon caricamento. Ma quando vanno oltre 100 MB il processo ha difficoltà (come ci si aspetterebbe).Lettura di file di testo di grandi dimensioni con flussi in C#
Quello che succede è che il file viene letto e spostato in un RichTextBox che viene poi navigato - non preoccuparti troppo di questa parte.
Lo sviluppatore che ha scritto il codice iniziale è semplicemente utilizzando uno StreamReader e facendo
[Reader].ReadToEnd()
che potrebbe richiedere molto tempo per completare.
Il mio compito è rompere questo bit di codice, leggerlo in blocchi in un buffer e mostrare una barra di avanzamento con un'opzione per annullarlo.
Alcune ipotesi:
- maggior parte dei file saranno 30-40 MB
- Il contenuto del file è di testo (non binaria), alcuni sono formato Unix, alcuni sono DOS.
- Una volta recuperato il contenuto, stabiliamo quale terminatore è utilizzato.
- Nessuno è interessato dopo aver caricato il tempo necessario per eseguire il rendering in richtextbox. È solo il caricamento iniziale del testo.
Ora per le domande:
- Posso semplicemente utilizzare StreamReader, quindi controllare la proprietà Length (così ProgressMax) ed emettere una lettura per una dimensione del buffer set e scorrere in un ciclo while MENTRE all'interno di un worker in background, quindi non blocca il thread dell'interfaccia utente principale? Quindi restituisci il stringbuilder al thread principale una volta completato.
- Il contenuto andrà a uno StringBuilder. posso inizializzare lo StringBuilder con le dimensioni del flusso se la lunghezza è disponibile?
Queste sono (nelle vostre opinioni professionali) buone idee? Ho avuto alcuni problemi in passato con la lettura di contenuti da Stream, perché mancheranno sempre gli ultimi pochi byte o qualcosa del genere, ma farò un'altra domanda se questo è il caso.
30-40MB file di script? Santo sgombro! Odio dover rivedere il codice ... – dthorpe
Sono solo poche righe di codice. Vedi questa libreria che sto usando per leggere anche 25gb e più file di grandi dimensioni. https://github.com/Agenty/FileReader/ – Vicky