我有我要执行基于字节的查找和替换一个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的“文件”的方式相比相对较小。 我可以很容易地看到,为什么我的算法是缓慢的,但我不知道我怎么会做的更好。