我正在寻找性能有效的方法来比较两个字节[]的相等性.大小超过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); }
原文地址:https://www.jb51.cc/c/117876.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。