Miglioramento delle prestazioni con la memorizzazione nella cache dei file in C # [chiuso]

0

EDIT: avevi ragione, il problema non è controllare se esiste un file con lo stesso nome ma la connessione. Ho fatto un errore misurando l'ora con StopWatch e incluso una parte che utilizzava la connessione di rete.

Domanda originale: Sto scrivendo un software che analizza i dati da un database. Nel database ci sono molti file di testo - potrebbero essere 100 GB - che vanno da 100 KB a qualche MB (< 10 MB). Il mio software dovrebbe eseguire un'attività di analisi ogni notte. Quindi voglio implementare una cache di file che memorizza i file e li scarica di nuovo solo se sono stati modificati. Il mio problema è che più file ho nella mia cartella di archiviazione, più lento è l'intero processo di verifica della presenza del file. Sto usando C #.

Le mie idee fino ad ora:

  • Caricamento lento - scarica il file solo se non è possibile accedervi
  • Raggruppa i file nella cartella in modo da avere meno file in una directory
  • Creazione di un dizionario con nome file come chiave e Oggetto file come valore per tutti i file in una directory prima di iniziare l'analisi di una cartella (presupponendo che trovare i file in un dizionario dovrebbe essere molto più veloce rispetto al disco)

Ho investito già un po 'di tempo e prima di reimplementarlo voglio sapere:

  • C'è qualcos'altro (idea) che potrei provare?
  • In C # esiste una best practice per la gestione dei file che consente di ottenere le migliori prestazioni?

Proprio come le informazioni secondarie, se c'è un nuovo file devo analizzare tutte le linee di esso. C'è un modo più veloce di StreamReader se so in anticipo che si tratta di un file separato tabulatore e devo leggere per certo tutte le righe di esso e analizzare le informazioni?

Stiamo parlando di un database Oracle. I file sono archiviati come BLOB nel database. Il database è organizzato come albero e gli elementi hanno figli che sono file che contengono lo stato degli elementi. Quei file che devo scaricare per poterli analizzare. Posso ottenere l'ultima modifica data in modo da poter scaricare solo i file che mi servono (che sono cambiati o sono nuovi). Ci sono circa 300.000 file nel database ma non ho bisogno di tutti loro. Ho accesso in scrittura alle cartelle in cui voglio memorizzarle con il mio programma sul disco locale. Questa struttura di cartelle in cui voglio memorizzarle chiamo "file cache".

    
posta JoeFox 20.09.2015 - 15:32
fonte

1 risposta

3

Il salvataggio di file su file non è normalmente un buon modo per creare una cache. Se nel tuo caso è il download di file di grandi dimensioni in rete da una macchina remota che è lenta. Creerei un altro database locale identico per archiviare i file una volta scaricati.

Se ciò non è possibile, creare un piccolo database in cui è sufficiente memorizzare l'id, il nome file e la directory dei file scaricati. Puoi usarlo per verificare l'esistenza del file e poi leggerlo via disco come fai ora.

Invece di leggere tutte le righe in un file per vedere se è uguale a quello nuovo, crea un checksum quando lo scarichi e lo aggiungi alla tabella del database.

    
risposta data 20.09.2015 - 18:31
fonte

Leggi altre domande sui tag