В одной из тем поднимался вопрос, какая функция будет работать быстрее, использующая стандартную функцию PixelSearch или берущая цвет через DC и я решил проверить это. Был написан тестовый скрипт, в одинаковых условиях использующий один и тот же алгоритм для определения дистанции в овервью.
Конфиг тестовой машины:
Процессор x86 Family 6 Model 28 Stepping 2 GenuineIntel ~1330 МГц (Atom Z520)
Полный объем физической памяти 1 024,00 МБ
Имя Intel(R) Graphics Media Accelerator 500
Eve запущена с минимальными настройками, 1024х768 Fixed Window, включена звездная карта.
Скрипт был скомпилен в ехе и на время выполнения выставлял себе приоритет 4 - High.
Каждую функцию скрипт прогонял 10 раз, записывая минимальное, максимальное и среднее время выполнения.
не буду выкладывать весь скрипт, укажу только ключевые моменты.
Ну и результаты в скрине
Расшифрую - сначала идет дистанция распознанная через DC, потом (dist std) через стандартную функцию PixelSearch, time - среднее время выполнения по 10 циклам, time min/max - минимальное и максимальное, 1 -DC, 2- PixelSearch.
Как видим результат неутешителен, функция работающая через DC проигрывает 55% производительности.
Если есть вопросы или видите какие-то грубые ошибки - пишите.
P.S. Ради интереса проверил еще зависимость выполнения от приоритета процесса, с нормальным приоритетом время выполнения увеличилось вдвое. Реалтайм тоже показал себя плохо, из чего делаем вывод, что менять приоритет на процессороемкие функции можно и нужно, но выбирать между 3 и 4 (3 - Above Normal 4 - High).
P.P.S. А все же время распознания 12 строчек овервью порадовало. Особенно минимальное у PixelSearch. 57 мс.
UP Курил-курил справку, нашел еще функцию
, поставив ее вначале скрипта, и после подсовывая указатель в DllCall улучшил результат до сравнимого с PixelSearch. Но тем не менее, побить Пикселсерч пока не могу.)
Конфиг машины Q8300, Asus Commando, 6Gb Ram, GTS 250, win7 64
Затерлось время макс - 85.16
Конфиг тестовой машины:
Процессор x86 Family 6 Model 28 Stepping 2 GenuineIntel ~1330 МГц (Atom Z520)
Полный объем физической памяти 1 024,00 МБ
Имя Intel(R) Graphics Media Accelerator 500
Eve запущена с минимальными настройками, 1024х768 Fixed Window, включена звездная карта.
Скрипт был скомпилен в ехе и на время выполнения выставлял себе приоритет 4 - High.
Каждую функцию скрипт прогонял 10 раз, записывая минимальное, максимальное и среднее время выполнения.
не буду выкладывать весь скрипт, укажу только ключевые моменты.
Код:
$hWnd=WinGetHandle("EVE")
if $hWnd <> 0 Then
WinActivate("EVE")
WinWaitActive("EVE")
...
Local $hDC = _WinAPI_GetDC($hWnd)
...
$ColGet=DllCall('gdi32.dll', 'dword', 'GetPixel', 'hwnd', $hDC, 'int', $x, 'int', $y) ;получаю цвет
Local $lay = BitAND($ColGet[0], 0x0000FF) ; беру только 1 слой для сравнения
if Abs($lay-$PartofColor)<=$var Then ;и если он меньше заданного расхождения
return 1 ; @error остается в 0
Else
SetError(1) ; а если больше - ставлю @error
EndIf
...
_WinAPI_ReleaseDC($hWnd, $hDC)
Ну и результаты в скрине

Расшифрую - сначала идет дистанция распознанная через DC, потом (dist std) через стандартную функцию PixelSearch, time - среднее время выполнения по 10 циклам, time min/max - минимальное и максимальное, 1 -DC, 2- PixelSearch.
Как видим результат неутешителен, функция работающая через DC проигрывает 55% производительности.
Если есть вопросы или видите какие-то грубые ошибки - пишите.
P.S. Ради интереса проверил еще зависимость выполнения от приоритета процесса, с нормальным приоритетом время выполнения увеличилось вдвое. Реалтайм тоже показал себя плохо, из чего делаем вывод, что менять приоритет на процессороемкие функции можно и нужно, но выбирать между 3 и 4 (3 - Above Normal 4 - High).
P.P.S. А все же время распознания 12 строчек овервью порадовало. Особенно минимальное у PixelSearch. 57 мс.
UP Курил-курил справку, нашел еще функцию
Код:
DllOpen
Конфиг машины Q8300, Asus Commando, 6Gb Ram, GTS 250, win7 64

Затерлось время макс - 85.16