Что нового

Рейтинг самых медленных функций!

Kalisnik

Эволюция
Сообщения
295
Репутация
63
Я вот с неданего времени начал задумываться над скоростью своих скриптов. И так между прочим мне пришла в голову идея, что не плохо было бы, если на форуме был рейтинг самых медленных функций, ключевых слов и т.д. Т.е. все то, что может тормозить работу наших скриптов. Думается это была бы ценная информация для новичков вроде меня. :blum: Начинался бы список с "черепашек". Первые две строки я уже вписал - все для Партии ;):

1). PixelChecksum

2). PixelGetColor (на скан 1200 пикс. у меня уходило более 30 сек.)

Кстати, добавлю, что на переключение опции PixelCoordMode требуется определенное время. Поэтому если эта опция имеет решающее значение в процессе выполнения скрипта объязательно ставьте паузу на 100 мс. как минимум. В моем случае отсутсвие данной паузы привело к неработоспособности скрипта.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Dell 1.5Ghz
Время выполнения: 1.5 сек
Код:
#include <Array.au3>
Opt("WinTitleMatchMode", 2)
Dim $x = @DesktopWidth
Dim $y = @DesktopHeight/2
Dim $aData[1]
Run("rundll32.exe shimgvw.dll ImageView_Fullscreen C:\Documents and Settings\All Users\Документы\Мои рисунки\Образцы рисунков\Зима.jpg")
$hWin = WinWait("Программа просмотра изображений и факсов")
WinActivate($hWin)
$Time = TimerInit()
For $i = 0 To 1200
If $x = 0 Then
	$x = @DesktopWidth
	$y -= 1
EndIf
Redim $aData[$i+1]	
$aData[$i] = Hex(PixelGetColor($x, $y , $hWin))
$x -= 1
Next
MsgBox(262144,"",Round(TimerDiff($Time)/1000, 1))
_ArrayDisplay($aData)


P.S. Не так уж и медленно :smile:

Немного поправил скрипт! Для просмотра у меня по умолчанию стоит "Программа просмотра изображений и факсов"
 
Автор
K

Kalisnik

Эволюция
Сообщения
295
Репутация
63
Garrett
Этот скрипт у меня выполняется 21.4 сек. Проц: 4 ядра 2.66 Ггц. ОС: Win 7 Ultimate x64.
В чем может быть причина? При установке AutoIt помню было что-то связанное с поддержкой х64 - я отказался. Может в этом дело? Проц у меня вообще не загружается....
Да и зачем DLL-файлы в этом скрипте? rundll32.exe видимо открывает файл с изображением, а второй зачем? Почему бы не воспользоваться просто ShellExecute?

Сейчас попробовал второй раз скрипт запустить с отключенным антивирусником... и вовсе 26 сек. :shok:


Добавлено:
Сообщение автоматически объединено:

Переустановил AutoIt, с поддержкой х64. Ни чего не изменилось почти, 20.1 сек.


Добавлено:
Сообщение автоматически объединено:

Ребят, подскажите кто чем может. Я уж и не знаю что с этим и делать :'( Все перепробовал. В скриптах приходится каждый пиксель экономить, выдумывать по целой кучи примочек чтобы выйграть дрогоценные секунды....
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
QX6950 (3 ГГц), Windows XP SP2 x86

2.2


Добавлено:
Сообщение автоматически объединено:

Kalisnik, а ты в каком режиме запускаешь скрипт x64 или Wow32?
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Kalisnik [?]
Этот скрипт у меня выполняется 21.4 сек. Проц: 4 ядра 2.66 Ггц. ОС: Win 7 Ultimate x64.
У AZJIO всё работает и на 2х ядрах!

При установке AutoIt помню было что-то связанное с поддержкой х64 - я отказался
Возможно зря :smile:
Я Autoit ставлю в ручную, из zip архива! Мне очень нравится то, что можно обойтись без инсталлятора!
Да и зачем DLL-файлы в этом скрипте? rundll32.exe видимо открывает файл с изображением, а второй зачем?
"Программа просмотра изображений и факсов" это встроенное приложение explorer`a, для того чтобы его запустить, в командной строке нужно прописать rundll32.exe shimgvw.dll ImageView_Fullscreen < путь к файлу>.
Почему бы не воспользоваться просто ShellExecute?
Можно (кому как нравится) :smile:
Код:
ShellExecute("rundll32.exe", "shimgvw.dll ImageView_Fullscreen C:\Documents and Settings\All Users\Документы\Мои рисунки\Образцы рисунков\Зима.jpg", @WindowsDir)
 
Автор
K

Kalisnik

Эволюция
Сообщения
295
Репутация
63
Yashied
Пробовал и так, и так... время не меняется. Но AutoIt ставлю без поддержки х64. Потому что AutoIt по-умолчанию запускает не компелированные скрипты в х64 режиме (ShellExecute), а у меня в этом режиме обнаруживались какие-то ошибки... уже не помню что точно. Мне кажется это из-за ОС. Или попробовать поставить AutoIt более ранней версии?
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
ShellExecute - так даже у меня время снизилось 1.4 на ноутбуке! ;D
 
Автор
K

Kalisnik

Эволюция
Сообщения
295
Репутация
63
Garrett
Будем считать что я умудрился дать ценный совет! :laugh:
 
Автор
K

Kalisnik

Эволюция
Сообщения
295
Репутация
63
Garrett
А у меня ShellExecute запускает без всяких DLL... :shok:
Код:
ShellExecute("C:\Windows\Web\Wallpaper\Landscapes\img9.jpg")



Добавлено:
Сообщение автоматически объединено:

Garrett сказал(а):
Yashied [?]
QX6950 (3 ГГц), Windows XP SP2 x86

2.2
Интересно, почему 3Ghz медленнее чем 1.5Ghz :shok:

Намного интереснее почему Q8400 медленнее почти в 10 раз :laugh:. Надо сверить версии AutoIt и ОС. ;)
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Kalisnik [?]
А у меня ShellExecute запускает без всяких DLL...
Я писал это для того, чтобы все были в равных условиях! Вдруг у вас по умолчанию другая программа!
 
Автор
K

Kalisnik

Эволюция
Сообщения
295
Репутация
63
Garrett
Точно! *Бью себя по пальцам!*
 

SyDr

Сидра
Сообщения
651
Репутация
158
Garrett сказал(а):
Dell 1.5Ghz
Время выполнения: 1.5 сек
Код:
#include <Array.au3>
Opt("WinTitleMatchMode", 2)
Dim $x = @DesktopWidth
Dim $y = @DesktopHeight/2
Dim $aData[1201]
ShellExecute("C:\Windows\Web\Wallpaper\Landscapes\img9.jpg")
$hWin = WinWait("Программа просмотра изображений и факсов")
WinActivate($hWin)
$Time = TimerInit()
For $i = 0 To 1200
If $x = 0 Then
	$x = @DesktopWidth
	$y -= 1
EndIf
$aData[$i] = Hex(PixelGetColor($x, $y , $hWin))
$x -= 1
Next
MsgBox(262144,"",Round(TimerDiff($Time)/1000, 1))
_ArrayDisplay($aData)


P.S. Не так уж и медленно :smile:

Немного поправил скрипт! Для просмотра у меня по умолчанию стоит "Программа просмотра изображений и факсов"

У меня вообще не пашет :smile: У меня нет обоины по этому пути.
И зачем здесь 1200 ReDim?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Garrett сказал(а):
Интересно, почему 3Ghz медленнее чем 1.5Ghz

Потому, что AutoIt пашет на одном ядре (у меня их 4) => загрузка 25%. У тебя 2-x ядерный камень => загрузка 50%. Как-то так.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Вот проверил на трёх компьютерах:
1 - Ноутбук Dell 1.5 WinXP SP2 - 1.6
2 - PC 3Ghz WinXP SP2 (одно ядро HiperTrading - ON) - 1.3
Странно :shok:
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Garrett сказал(а):
Вот проверил на трёх компьютерах:
1 - Ноутбук Dell 1.5 WinXP SP2 - 1.6
2 - PC 3Ghz WinXP SP2 (одно ядро HiperTrading - ON) - 1.3

Хороший у тебя ноутбук.

:smile:
 
Автор
K

Kalisnik

Эволюция
Сообщения
295
Репутация
63
SyDr
1200 - Дистанция для сравнения производительности по отношению к конкретной машинке )
Попробуйте так:
Код:
#include <Array.au3>
Opt("WinTitleMatchMode", 2)
Dim $x = @DesktopWidth
Dim $y = @DesktopHeight/2
Dim $aData[1]
ShellExecute("C:\Windows\Web\Wallpaper\Landscapes\img9.jpg")
$hWin = WinWait("img9.jpg - Средство просмотра фотографий Windows")
WinActivate($hWin)
$Time = TimerInit()
For $i = 0 To 1200
If $x = 0 Then
    $x = @DesktopWidth
    $y -= 1
EndIf
Redim $aData[$i+1]  
$aData[$i] = Hex(PixelGetColor($x, $y , $hWin))
$x -= 1
Next
MsgBox(262144,"",Round(TimerDiff($Time)/1000, 1))
_ArrayDisplay($aData)


Потом отпишите результат и свединия о процессоре и ОС. Будем благодарны :smile:


Добавлено:
Сообщение автоматически объединено:

Аааа... :laugh: У меня же тоже древний бук есть! Счас на нем проверю!
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Yashied [?]
Потому, что AutoIt пашет на одном ядре (у меня их 4) => загрузка 25%. У тебя 2-x ядерный камень => загрузка 50%. Как-то так.
На ноуте одно ядро, и пиковая нагрузка в конце составила 100%. А в основном держалась ~35%


Добавлено:
Сообщение автоматически объединено:

Yashied [?]
Хороший у тебя ноутбук.
Сам в шоке :laugh:
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
как уже сказал Yashied, кол-во ядер на быстродействие влияет очень опосредованно. процесс порожденный AutoIt может работать только с одним ядром. а вот его загруженность зависит от того что еще висит на нем помимо autoit. если ядро всего одно, то понятно, что оно будет загружено по самые уши, т.к. все остальные процессы тоже на нем. а вот в случае даже двух ядер, ядро с autoit может загрузится не на полную. т.к. остальные процессы могут перекинуться на свободное ядро. в итоге, не исключено что суммарная загруженность процессора может быть меньше 50
 
Верх