2009-12-07 81 views
0

我已經用螞蟻描繪了我的應用程序,發現> 10%在CRC32計算中。 (該CRC32-計算在普通的C#實現)C#fast crc32計算:

我做了一些谷歌搜索,並瞭解在Visual Studio 2008中的以下內在函數:

_mm_crc32_u8

_mm_crc32_u16

_mm_crc32_u32

_mm_crc32_u64

http://msdn.microsoft.com/en-us/library/bb514036.aspx

任何人都可以告訴我/告訴我如何使用這些來取代我自制的CRC32?

+0

請注意,這些是C++內在函數,而不是C#。 – MSalters 2009-12-07 10:06:51

回答

0

您可以使用PInvoke(和純C#)或創建C++/CLI項目並圍繞此函數編寫包裝。

您是否看過msdn上的示例?爲了計算字符串的CRC,你只需要循環它。

嗯,它們是內在函數。這意味着你只有一個選擇:創建C++/CLI包裝器。

1

幾年前我用了一個我在codeproject上找到的。現在我再也找不到它了。 但是這其中也看起來非常快:

CRC32 on CodeProject

+1

這就是通常的單表查找,有2個XOR,一個AND和我目前正在使用的一個轉換;) – Pygmy 2009-12-07 10:03:29

2

C#封裝器可能是目前體面大小數據的最佳解決方案。

http://code.google.com/p/crcutil/

Crcutil庫提供有效實現CRC算法。它包括由Andrew Kadatch和Bob Jenkins在2007年初發明的一種新穎的多字CRC算法的參考實現。新算法針對現代英特爾和AMD處理器進行了大量調整,並且速度遠快於幾乎所有其他軟件CRC算法。

硬件輔助的CRC32C:0.13(Nehalem)每個字節的CPU週期數。 64位和更小的CRC:1.0(Nehalem) - 每個字節1.2(核心)CPU週期。 128位CRC:每個字節1.7個CPU週期。

Haswell的AVX2可能會帶來一些可能會進一步提高性能的指令,如果是這樣的話,如果它們被包含在這個庫中會很酷。

+0

雖然這很有趣,但它並不回答「如何替換Pygmys自制CRC32算法」 。解釋如何去包裝提到的圖書館。無法+1,因爲它不是一個有效的答案。 – 2013-03-08 11:53:30