NIKZZZZ
 
  
  Gold Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Maza Faka    Цитата:|  Посмотри здесь, очень интересный пример использования WinAPI функции  |      Спасибо за подсказку.   Убедился, что строковые функции очень медленно работают.   Для bin  данных лучше создать структуру с помощью  DllStructCreate(), обращение к ней на более , чем на два порядка превышает по скорости , чем работа со строками.   модифицированный пример  сравнения двух bin файлов:       Код: #include <WinAPI.au3>      $sFile1 = 'file.bin'   $sFile2 = 'file2.bin'   $sFile3 = 'Result.txt'   $nFileSize1=FileGetSize($sFile1)   $nFileSize2=FileGetSize($sFile2)   Global $tBuffer1[$nFileSize1]   Global $tBuffer2[$nFileSize2]      $bBuffer1 = DllStructCreate("byte[" & $nFileSize1 & "]")   $hFile = _WinAPI_CreateFile($sFile1, 2, 2)   _WinAPI_ReadFile($hFile, DllStructGetPtr($bBuffer1),$nFileSize1,$nFileSize1)   _WinAPI_CloseHandle($hFile)      $bBuffer2 = DllStructCreate("byte[" & $nFileSize2 & "]")   $hFile = _WinAPI_CreateFile($sFile2, 2, 2)   _WinAPI_ReadFile($hFile, DllStructGetPtr($bBuffer2),$nFileSize2,$nFileSize2)   _WinAPI_CloseHandle($hFile)      $iAd = -1   $iCount = 0   $sf3 = ''   For $iAddr = 1 To $nFileSize2            If (DllStructGetData($bBuffer1,1,$iAddr) <> DllStructGetData($bBuffer2,1,$iAddr)) Or ($iAddr>$nFileSize1) Then           If $iAd <> $iAddr Then               $sf3 &= @CRLF & Hex($iAddr -1, 8) & ':'               $iCount = 0               $iAd = $iAddr           EndIf           $sf3 &= Hex(DllStructGetData($bBuffer2,1,$iAddr),2)           $iAd += 1           $iCount += 1           If $iCount = 64 Then               $iAd = -1           EndIf       EndIf   Next      $f = FileOpen($sFile3, 2)   FileWrite($f,$sf3)   FileClose($f)  |         Файл ~ 1 Mb   Время работы ранее приведенного скрипта  - 240 секунд    Этого - < 5 секунд.      Жаль, что работа со структурами поддержана несколько неудобно.    |   Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено:  17:14 07-11-2008  | Исправлено: NIKZZZZ,   17:17 07-11-2008    |  
  |