0
我有一个正在运行的Windows服务。在下载一个zip文件后,应该检查该文件。目前它将通过MD5散列进行检查。但是这对于大约1GB的文件大小并不是很快。改变这种情况的另一个原因是我在Windows 7 64位计算机上遇到了一个outofmemory异常,同时将该文件读入一个字节数组中。最快的方法来检查C#中的文件真实性
感谢您的帮助。
我有一个正在运行的Windows服务。在下载一个zip文件后,应该检查该文件。目前它将通过MD5散列进行检查。但是这对于大约1GB的文件大小并不是很快。改变这种情况的另一个原因是我在Windows 7 64位计算机上遇到了一个outofmemory异常,同时将该文件读入一个字节数组中。最快的方法来检查C#中的文件真实性
感谢您的帮助。
也许MD5看起来simplier,但这样的事情应该也行(这不是内存相关的):
static bool Compare(string filePath1, string filePath2)
{
using (FileStream file = File.OpenRead(filePath1))
{
using (FileStream file2 = File.OpenRead(filePath2))
{
if (file.Length != file2.Length)
{
return false;
}
int count;
const int size = 0x1000000;
var buffer = new byte[size];
var buffer2 = new byte[size];
while ((count = file.Read(buffer, 0, buffer.Length)) > 0)
{
file2.Read(buffer2, 0, buffer2.Length);
for (int i = 0; i < count; i++)
{
if (buffer[i] != buffer2[i])
{
return false;
}
}
}
}
}
return true;
}
你是如何计算的'MD5'?您不需要将整个文件加载到内存中。请参阅http://stackoverflow.com/questions/10520048/calculate-md5-checksum-for-a-file - 对于1gb,MD5应该没有问题。大部分成本将会受IO限制。 – Rob
谢谢,我不知道为什么我把文件加载到内存中。 – xlShortylx