当前位置:  开发笔记 > 编程语言 > 正文

比较两个字节数组的最快方法是什么?

如何解决《比较两个字节数组的最快方法是什么?》经验,为你挑选了1个好方法。

我试图比较VB.NET中的两个长字节数,并遇到了障碍.比较两个50兆字节的文件大约需要两分钟,所以我显然做错了什么.我在一台拥有大量内存的x64机器上,所以那里没有问题.这是我目前使用的代码,想要改变.

_Bytes并且item.Bytes是要比较的两个不同的数组,并且已经是相同的长度.

For Each B In item.Bytes
   If B <> _Bytes(I) Then
        Mismatch = True
        Exit For
   End If
   I += 1
Next

我需要能够尽可能快地比较可能数百兆字节甚至可能是一千兆字节或两千兆字节的文件.任何能够更快地完成此任务的建议或算法?

Item.bytes是从数据库/文件系统中取出的对象,它返回比较,因为它的字节长度与用户想要添加的项匹配.通过比较两个阵列,我可以确定用户是否已经向DB添加了新内容,如果没有,那么我可以将它们映射到另一个文件而不会浪费硬盘空间.

[更新]

我将数组转换为Byte()的局部变量,然后进行相同的比较,相同的代码并在一秒钟内运行(我必须对其进行基准测试并将其与其他人进行比较),但如果你对本地做同样的事情变量和使用通用数组变得非常慢.我不确定为什么,但它为我提出了更多关于数组使用的问题.



1> Jon Skeet..:

这叫什么_Bytes(I)电话?它不是每次都加载文件,是吗?即使有缓冲,这也是坏消息!

在一次查看多头,可能使用不安全的代码等方面,将有很多方法可以微观优化这一点 - 但我只是专注于首先获得合理的性能.显然,有一些非常奇怪的事情发生.

我建议你将比较代码提取到一个单独的函数中,该函数需要两个字节的数组.这样你知道你不会做任何奇怪的事情.我也会使用一个简单的For循环而不是For Each在这种情况下 - 它会更简单.哦,先检查长度是否正确:)

编辑:这是我使用的代码(未经测试,但很简单).这是在C#中的一分钟 - 我将在一秒钟内转换它:

public static bool Equals(byte[] first, byte[] second)
{
    if (first == second)
    {
        return true;
    }
    if (first == null || second == null)
    {
        return false;
    }
    if (first.Length != second.Length)
    {
        return false;
    }
    for (int i=0; i < first.Length; i++)
    {
        if (first[i] != second[i])                
        {
            return false;
        }
    }
    return true;
}

编辑:这是VB:

Public Shared Function ArraysEqual(ByVal first As Byte(), _
                                   ByVal second As Byte()) As Boolean
    If (first Is second) Then
        Return True
    End If

    If (first Is Nothing OrElse second Is Nothing) Then
        Return False
    End If
    If  (first.Length <> second.Length) Then
         Return False
    End If

    For i as Integer = 0 To first.Length - 1
        If (first(i) <> second(i)) Then
            Return False
        End If
    Next i
    Return True
End Function

推荐阅读
臭小子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有