Предоставленные вами изображения предназначены для списков контроля доступа к сети (NACL), а не для групп безопасности. В общем, вы никогда не должны изменять конфигурацию NACL , если вы действительно не разбираетесь в сетях.
Скорее, вам следует настроить группу безопасности таким образом, чтобы разрешить входящий доступ только с вашего IP-адреса на желаемых портах.
Что _Bytes(I)
назвать выполнение? Это не загружает файл каждый раз, не так ли? Даже с буферизацией, которая была бы плохими новостями!
Будет много способов микрооптимизировать это с точки зрения рассмотрения longs за один раз, потенциально с помощью небезопасного кода и т.д. - но я просто сконцентрировался бы на получении разумной производительности сначала. Очевидно существует что-то очень нечетное продолжение.
Я предлагаю, чтобы Вы извлекли код сравнения в отдельную функцию, которая берет два массива байтов. Тем путем Вы знаете, что не будете делать ничего нечетного. Я также использовал бы простое 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
Если Вы не должны знать байт, используйте 64-разрядный ints, который дает Вам 8 сразу. На самом деле можно выяснить неправильный байт, после того как Вы изолировали его к ряду 8.
Использование BinaryReader:
saveTime = binReader.ReadInt32()
Или для массивов ints:
Dim count As Integer = binReader.Read(testArray, 0, 3)
Я вижу две вещи, которые могли бы помочь:
Во-первых, вместо того, чтобы всегда получить доступ к второму массиву как к объекту. Байты, используйте локальную переменную для указания непосредственно на массив. Таким образом, прежде, чем запустить цикл, сделайте что-то вроде этого:
array2 = item.Bytes
Это сохранит издержки разыменования от объекта каждый раз, когда Вы хотите байт. Это могло быть дорого в Visual Basic, особенно если существует Метод получателя для того свойства.
Кроме того, используйте "определенный цикл" вместо "для каждого". Вы уже знаете длину массивов, поэтому просто кодируете цикл с помощью того значения. Это избежит издержек обработки массива как набор. Цикл выглядел бы примерно так:
For i = 1 to max Step 1
If (array1(i) <> array2(i))
Exit For
EndIf
Next
Не строго связанный с алгоритмом сравнения:
Вы уверены, что Ваше узкое место не связано с доступной памятью, и время раньше загружало массивы байтов? Загрузка двух массивов байтов на 2 ГБ только для сравнения их могла принести большинство машин к их коленям. Если проектирование программы позволяет, попытайтесь использовать потоки для чтения меньших блоков вместо этого.