微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

没有绑定检查的C#byte []比较

我正在寻找性能有效的方法来比较两个字节[]的相等性.大小超过1 MB,因此应尽量减少每个数组元素的开销.

对于两个阵列,我的目标是在avoiding the repetitive bound checks之前击败SequenceEqualhand-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 举报,一经查实,本站将立刻删除。

相关推荐