我有一个 4Gb 文件,我想在其上执行基于字节的查找和替换。我已经编写了一个简单的程序来执行此操作,但是仅进行一次查找和替换需要很长时间(90 分钟以上)。我尝试过的一些十六进制编辑器可以在 3 分钟内完成任务,并且不会将整个目标文件加载到内存中。有谁知道我可以完成同样事情的方法?这是我当前的代码:
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;
}
顺便说一下,与 4Gb“文件”相比,查找和替换相对较小。我可以很容易地看出为什么我的算法很慢,但我不确定如何才能做得更好。