В VB6: строка поиска производительности


5 лет назад, когда я была влюблена в ВБ, я создал эту простую программу, чтобы обнаружить, если файл является вирусом или нет.

Мне бы хотелось, чтобы увидеть, если вы можете помочь мне оптимизировать его, скорость-мудрый.

Я открываю исполняемый файл в богатом управления TextBox и использовать инстр способ для поиска всех экземпляров предопределенный строку. Проблема в том, что инстр способ-это чертовски медленно при поиске файлами как 512 КБ.

Может ли скорость быть повышена?

If InStr(1, rt.Text, "scripting.filesystemobject") Then
 It does something with FSO
End If

If InStr(1, rt.Text, "thisprogramcannotberunindosmode") Or InStr(1, rt.Text, "thisprogrammustberununderwin32") Then
  Probably a DOS program
 Else
  looks like a GUI program
End If

If InStr(1, rt.Text, "hkey_local_machine") Then
 Does something with registry
End If
If InStr(1, rt.Text, "hkey_users") Then
 Does something with registry
End If
If InStr(1, rt.Text, "hkey_current_user") Then
 Does something with registry
End If
If InStr(1, rt.Text, "hkey_classes_root") Then
 Does something with registry
End If
If InStr(1, rt.Text, "hkey_current_config") Then
 Does something with registry
End If


1185
5
задан 24 апреля 2011 в 03:04 Источник Поделиться
Комментарии
2 ответа

В VB2010 функция instr в исполнении метод indexOf

    Dim ipsum As String = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."

Dim tries As Integer = 100000
Dim stpw As New Stopwatch
Dim iof As Integer
Dim f As String = "sint"

stpw.Reset()
stpw.Start()

For x As Integer = 1 To tries
iof = ipsum.IndexOf(f)
Next
stpw.Stop()
Label1.Text = stpw.ElapsedMilliseconds.ToString("n2")

stpw.Reset()
stpw.Start()

For x As Integer = 1 To tries
iof = InStr(ipsum, f)
Next
stpw.Stop()
Label2.Text = stpw.ElapsedMilliseconds.ToString("n2")

5
ответ дан 25 апреля 2011 в 12:04 Источник Поделиться

Я даже и не проверял это на всех, и этот код сам по себе не полное решение, но я думал, что я бы предложил совершенно иной подход. (Он не может быть быстрее на практике, но я пытаюсь думать вне коробки...)

Вы могли бы взять каждое слово в РТ.Текст (пробелы/знаки препинания запятые) и подключите эти слова в сценарии.Словарь? Поиск ваших ключевых терминов в словаре должны быть очень быстро, если читать в словарь, в первую очередь, это быстрее.

Этот формируется из VBA, но вы должны получить понятие:

Sub Test()

Dim sSource As String
Dim sSplitText() As String
Dim dictAllWords As New Scripting.Dictionary
Dim i As Integer

sSource = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."

sSource = Replace(sSource, ",", " ") ' Repeat for other punctuation and whitespace...

sSplitText = Split(sSource, " ")

For i = 0 To UBound(sSplitText)
If Not dictAllWords.Exists(sSplitText(i)) Then dictAllWords.Add sSplitText(i), sSplitText(i)
Next i

If dictAllWords.Exists("consectetur") Then
'Do your stuff here
End If

End Sub

1
ответ дан 5 июля 2012 в 05:07 Источник Поделиться