我正在寻找性能有效的方法来比较两个字节[]的相等性.大小超过1 MB,因此应尽量减少每个数组元素的开销.
对于两个阵列,我的目标是在avoiding the repetitive bound checks之前击败SequenceEqual
或hand-coded for-loop over every item的速度.就像Array.Copy可以导致快速memcpy一样,什么会导致memcmp?
解决方法
如果性能真的很重要,那么最快的方法是使用每个Windows版本附带的CRT库.这个代码在我的poky笔记本电脑上需要大约51毫秒,也适用于64位机器:
using System; using System.Runtime.InteropServices; using System.Diagnostics; class Program { static void Main(string[] args) { byte[] arr1 = new byte[50 * 1024 * 1024]; byte[] arr2 = new byte[50 * 1024 * 1024]; var sw = Stopwatch.StartNew(); bool equal = memcmp(arr1,arr2,arr1.Length) == 0; sw.Stop(); Console.WriteLine(sw.ElapsedMilliseconds); Console.ReadLine(); } [DllImport("msvcrt.dll")] private static extern int memcmp(byte[] arr1,byte[] arr2,int cnt); }