Ho un file da 4 GB che voglio eseguire una ricerca e sostituzione basata su byte. Ho scritto un semplice programma per farlo ma ci vuole troppo tempo (90 minuti +) per fare solo una ricerca e sostituzione. Alcuni editor esadecimali che ho provato possono eseguire l'operazione in meno di 3 minuti e non caricare l'intero file di destinazione in memoria. Qualcuno conosce un metodo in cui posso realizzare la stessa cosa? Ecco il mio codice corrente:Elaborazione di file enormi in C#
public int ReplaceBytes(string File, byte[] Find, byte[] Replace)
{
var Stream = new FileStream(File, FileMode.Open, FileAccess.ReadWrite);
int FindPoint = 0;
int Results = 0;
for (long i = 0; i < Stream.Length; i++)
{
if (Find[FindPoint] == Stream.ReadByte())
{
FindPoint++;
if (FindPoint > Find.Length - 1)
{
Results++;
FindPoint = 0;
Stream.Seek(-Find.Length, SeekOrigin.Current);
Stream.Write(Replace, 0, Replace.Length);
}
}
else
{
FindPoint = 0;
}
}
Stream.Close();
return Results;
}
Trova e Sostituisci sono relativamente piccoli rispetto al 4Gb "File" a proposito. Posso facilmente capire perché il mio algoritmo è lento, ma non sono sicuro di come potrei farlo meglio.
Prima di tutto, leggere più di 1 byte alla volta. – SLaks
http://en.wikipedia.org/wiki/Rabin%E2%80%93Karp_algorithm – SLaks