【发布时间】:2019-11-23 13:05:56
【问题描述】:
我必须计算很多文件的 crc32,还有大文件(几 GB)。我尝试了几种在网上找到的算法,如Damieng 或this one,它可以工作,但速度很慢(超过 1 分钟)。 我在各种 crc32 算法上找到了this benchmark,发现 sse 4.2 有硬件加速的 crc32 方法。
我没有找到任何使用 SSE crc32 代码的 c# 代码示例。
1 - 有可能吗?
2 - 如何检测当前 cpu 是否启用了 SSE4.2? (切换 crc32 方法)
(如果可能,请提供代码示例)
【问题讨论】:
-
你分析过你的代码吗?我严重怀疑您的问题是由于缓慢的 CRC 算法,更可能是读取几 GB 数据的 I/O 开销。
-
@James 确实,或者你可以利用
unsafe代码区域和指针优化来获得一些好处——尽管这只是一个疯狂的猜想 :-) -
计算几个GB文件的CRC32需要读取整个文件...并按顺序处理。尝试测量读取整个文件(并添加字节或 32 位块,以避免您的系统优化读取)需要多长时间,并将其与您的 CRC32 计算进行比较。
-
CRC32 的密码学标签非常可怕,我真的希望这是一个错误(在这种情况下请删除标签),否则你的问题比计算缓慢更多。
-
@Bruno 你是对的,但是 crc32 算法非常适合 .net System.Security.Cryptography 模式。这就是我添加标签的原因。无论如何,如果它惹恼了其他人,我可以删除它。我用它来识别文件。
标签: c# cryptography sse crc32