VB.net Поиск байтовых массивов - PullRequest
0 голосов
/ 09 февраля 2011

Я нахожусь в процессе разработки простого антивирусного сканера, и я искал улучшения скорости для следующей функции:

Public Function FindAInB(ByRef byteArrayA() As Byte, ByRef byteArrayB() As Byte) As Integer
    Dim startmatch As Integer = -1
    Dim offsetA As Integer = 0
    Dim offsetB As Integer = 0

    For offsetB = 0 To byteArrayB.Length - 1
        If byteArrayA(offsetA) = byteArrayB(offsetB) Then
            If startmatch = -1 AndAlso offsetB < byteArrayB.Length - 8 Then
                startmatch = offsetB
            End If
            offsetA += 1
            If offsetA = byteArrayA.Length Then
                Exit For
            End If
        Else
            offsetA = 0
            startmatch = -1
        End If
    Next
    Return startmatch
End Function

Мне нужно, чтобы она была турбо быстрой, потому что она ищет около 7800 байтмассивы в байтах выбранного файла.Трудно объяснить, но есть ли альтернатива приведенному выше коду или способ ускорить его?

Заранее спасибо!

1 Ответ

1 голос
/ 09 февраля 2011

Вам следует проверить алгоритмы поиска строк, такие как Boyer-Moore .

Хотя вы на самом деле не ищете текст, вы ищете строки байтов в большей строке байтов, поэтому алгоритмы такого типа могут значительно помочь.

...