gpt4 book ai didi

c# - 为什么 C# 中的 CRC32 实现这么慢?

转载 作者:太空狗 更新时间:2023-10-30 00:29:14 24 4
gpt4 key购买 nike

我正在使用以下函数计算 VS2008、.NET 3.5 项目中文件的 CRC32:

public UInt32 ComputeHash(System.IO.Stream stream)
{
unchecked
{
const int BUFFER_SIZE = 1024;

UInt32 crc32Result = 0xFFFFFFFF;
byte[] buffer = new byte[BUFFER_SIZE];
int count = stream.Read(buffer, 0, BUFFER_SIZE);

while (count > 0)
{
for (int i = 0; i < count; i++)
{
crc32Result = ((crc32Result) >> 8) ^ _crc32Table[(buffer[i]) ^ (crc32Result) & _LOOKUP_TABLE_MAX_INDEX];
}
count = stream.Read(buffer, 0, BUFFER_SIZE);
}

return ~crc32Result;
}
}

为了简洁起见,我省略了构建查找表 (_crc32Table) 的函数。该表是一个UInt32的数组,在类实例化时构建,包含256个值(256也是_LOOKUP_TABLE_MAX_INDEX + 1的值)。

我已经运行了一些基准测试,将其与 MD5CryptoServiceProvider 和 SHA1CryptoServiceProvider ComputeHash 函数进行比较,它们要快得多。 MD5 函数的速度是原来的两倍多,而 SHA1 散列的速度大约快 35%。有人告诉我 CRC32 很快,但事实并非如此。

我的假设有误吗?这是预料之中的还是这个算法有缺陷?

最佳答案

您正在将您的代码与内置函数进行比较,并询问为什么它们更快。您需要做的是找到内置函数的源代码。它们是如何工作的?看看有什么不同。

Betcha 内置函数调用 native 库并通过不必在托管内存框架内运行来作弊。

关于c# - 为什么 C# 中的 CRC32 实现这么慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/945641/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com