Что нового

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

Lazycat

Осваивающий
Сообщения
46
Репутация
21
Core2Duo E7300 (2.66), GF 7300 LE, WinXP SP3 - 0.7c.

А вообще вы уверены, что производительность этой функции зависит только от процессора? Мне кажется, тут скорее видеоподсистема или Aero влияет. Не пробовали отключать Aero?
 
Автор
K

Kalisnik

Эволюция
Сообщения
295
Репутация
63
На ноуте у меня 2.3 сек. Ноут: hp compag nx9105. Ос: Win XP x86 SP2
Здается мне, дело в ОС. Есть кто-нибудь с х64 разрядной 7-кой?


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

Loopback
Как отключить Aero?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Loopback сказал(а):
А вообще вы уверены, что производительность этой функции зависит только от процессора?

Эта функция не должна зависить от видеокарты. В любом случае, даже самая встроенная видюха даст фору любому процессору.
 
Автор
K

Kalisnik

Эволюция
Сообщения
295
Репутация
63
Loopback
Отключал Aero Peek, Aero Snap, Aero Shake. Ни каких изменений не произошло.
 

Lazycat

Осваивающий
Сообщения
46
Репутация
21
Kalisnik
Имелось в виду отключить полностью (т.е. поставить классическую тему), а не отдельные эффекты.
Yashied
Ну не сама видеокарта, конечно, а реализация графических функций в системе. Просто Aero очень сильно влияет на производительность графики. Вот и возникло такое подозрение.
 
Автор
K

Kalisnik

Эволюция
Сообщения
295
Репутация
63
Loopback
АААААААаааа :laugh: Дай я тебя расцилую!!!!!!!!!!!! Сработалооооооооооооо!!!!!!! Установил параметры быстродействия на производительность (т.е. убрал аеро) И..... результат выполнения данного скрипта с 21 сек упал на планку в 0.7 сек!!!!!!!!!!!! Трижды Ураааааааааааа товарищу Loopback!!!! Как оказалось, эта функция все же имеет некоторую зависимость от видеонастроек... что это? Баг? Или Aero настолько сильно жрет видеоресурсы от которых ЗАВИСИТ данная функция! Сейчас начну отключать по одному все настройки производительности что бы выяснить конкретно какая мешала выполнению данной функции!


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

Выявил конкретную опцию тормозящую функцию PixelGetColor. Нужно снять галочку в "Параметрах быстродействия" со строки "включение композиции рабочего стола" - это несложное действие творит чудеса!


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

По крайней мере на 7-ке ;D
 

SyDr

Сидра
Сообщения
651
Репутация
158
20 секунд.
Нагрузки на процессор со стороны скрипта не наблюдалось вообще.
Выполнение цикла:
1 раз - 0,1 мс
2-1200 разы - ~6-40 мс

Опытным путём выяснено, что на это влияет "композиция рабочего стола" (прозрачность).
После отключения - 0 - 0,1 с (Без использования лишних ReDim)
Ваш вариант - 1 с

AMD Athlon(tm) 64 X2 Dual Core Processor 4200+ (2 * 2 GHz)
 

yaodnako

Продвинутый
Сообщения
120
Репутация
78
Проверил - действительно при всех галках в параметрах быстродействия -> Визуальные эффекты.Работает за 21.1 сек.
При одной отключенной галке - Использование стилей отображения для окон и кнопок - скорость выполнения 0.8 сек.
Dell Vostro 1700 - Core2Duo 1.8 Ghz Win7 64bit


p.s.
В последнем скрипте желательно изменить строчку:
Код:
ShellExecute("C:\Windows\Web\Wallpaper\Landscapes\img9.jpg")

на :
Код:
ShellExecute("rundll32.exe", "shimgvw.dll ImageView_Fullscreen C:\Windows\Web\Wallpaper\Landscapes\img9.jpg", @WindowsDir)


потому что если у тебя по умолчанию используется любая другая программа просмотра изображений отличная от стандартной - скрипт не сработает.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Kalisnik сказал(а):
Этот скрипт у меня выполняется 21.4 сек...

А как ты вообще его умудрился запустить на Windows 7, он написан для XP. На 7 вообще ничего этого нет.
 
Автор
K

Kalisnik

Эволюция
Сообщения
295
Репутация
63

yaodnako

Продвинутый
Сообщения
120
Репутация
78
аааа - я думал Yashied ко мне обращается :smile:

вот скрины... запуска


работа без галки - Использование стилей отображения для окон и кнопок (случайно еще одну убрал - не хочу заного скрины делать)

вот второй вариант:

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

скрипт запускал такой :
Код:
#include <Array.au3>
Opt("WinTitleMatchMode", 2)
Dim $x = @DesktopWidth
Dim $y = @DesktopHeight/2
Dim $aData[1]
ShellExecute("rundll32.exe", "shimgvw.dll ImageView_Fullscreen C:\Windows\Web\Wallpaper\Landscapes\img9.jpg", @WindowsDir)
$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)
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Я думаю самая медленная функция - Sleep(). Например Sleep(2147483647) - выполняется 24 дня.

:smile:
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
OffTopic:
Yashied
Точнее 24 дня 20 часов 31 минута 23,647 секунд.

:rofl:
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Массив пикселей можно получить более "правильным" способом, это должно быть намного быстрее, нежели PixelGetColor(). И кстати, не зависит от Aero, а то без него как-то уж очень скучно. Проверим?

Код:
#Include <Array.au3>
#Include <GDIPlus.au3>
#Include <ScreenCapture.au3>
#Include <WinAPI.au3>

$Timer = TimerInit()

_GDIPlus_Startup()
$hBitmap = _ScreenCapture_Capture('', 0, 0, 799, 599)
$hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap)
$Width = _GDIPlus_ImageGetWidth($hImage)
$Height = _GDIPlus_ImageGetHeight($hImage)
$hArea = _GDIPlus_BitmapCloneArea($hImage, 0, 0, $Width, $Height, $GDIP_PXF32ARGB)
$tMap = _GDIPlus_BitmapLockBits($hArea, 0, 0, $Width, $Height, $GDIP_ILMREAD, $GDIP_PXF32ARGB)
$tBuff = DllStructCreate('byte[' & ($Width * $Height * 4) & ']', DllStructGetData($tMap, 'Scan0'))
$bData = DllStructGetData($tBuff, 1)
$sData = StringRegExpReplace(StringTrimLeft($bData, 2), '(.{8})', '\1 ')
$aData = StringSplit(StringStripWS($sData, 3), ' ', 2)
_GDIPlus_BitmapUnlockBits($hArea, $tMap)
_GDIPlus_ImageDispose($hImage)
_GDIPlus_ImageDispose($hArea)
_WinAPI_DeleteObject($hBitmap)
_GDIPlus_Shutdown()

ConsoleWrite(StringFormat('(' & $Width & ' x ' & $Height & ') - %.2f sec', TimerDiff($Timer) / 1000) & @CR)

;_ArrayDisplay($aData)


Intel Core 2 Extreme (QX6950), 3 GHz
Windows 7 x86, Aero включен
AutoIt 3.3.6.1

(800 x 600) - 1.57 сек



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

На сканирование всего экрана (1920 x 1200 = 2 304 000 точек) у меня ушло всего 7.4 сек!
 
Автор
K

Kalisnik

Эволюция
Сообщения
295
Репутация
63
Yashied [?]
Я думаю самая медленная функция - Sleep(). Например Sleep(2147483647) - выполняется 24 дня.
+1 ;D

[?]
Массив пикселей можно получить более "правильным" способом, это должно быть намного быстрее, нежели PixelGetColor(). И кстати, не зависит от Aero, а то без него как-то уж очень скучно. Проверим?

Вся аппаратура спит :smile: Проверю завтра :sleeping:
 
Автор
K

Kalisnik

Эволюция
Сообщения
295
Репутация
63
Yashied [?]
Массив пикселей можно получить более "правильным" способом, это должно быть намного быстрее, нежели PixelGetColor(). И кстати, не зависит от Aero, а то без него как-то уж очень скучно. Проверим?

Q8400 (2,66GHz)
Win 7 x64
(800 x 600) - 1.73 sec
от Aero не зависит.

Только в этом скрипте новняшек много, надо разбираться. И консолькой я так и не научился пока пользоваться :IL_AutoIt_1:


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

А это определенно в раздел "полезняшки". :smile:

Памятки программиста:
Код:
For $i = 0 to 24
	Sleep(2147483647)
Next
MsgBox(0, "", "Посмотреть конец света в 3D!")


Код:
While 1
For $i = 0 to 24
	Sleep(2147483647)
Next
WEnd
MsgBox(0, "", "Вскопать тещину грядку :(")


Код:
#comments-start
While 1
For $i = 0 to 24
	Sleep(2147483647)
Next
WEnd
#comments-end
MsgBox(0, "", "Смататься пораньше с работы")


Код:
Sleep(3000)
MsgBox(0, "", "...успев при этом спросить взаймы у проходящего мимо сотрудника по имени Сотрудник!")
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
Kalisnik
Я заменяю ConsoleWrite() на ToolTip() без изменения параметров (иногда удаляю @CRLF)...
ConsoleWrite() удобна, если редактируешь скрипты в SCITE...
 

Luke

Знающий
Сообщения
64
Репутация
14
Эти функции почти не зависят от процессора :smile:, чуть зависят от пропускной способности шины до видеопамяти, и очень сильно зависят от архитектуры OC, всяких там программных обёрток типа directx или GDI (прямого то доступа к видеопамяти нет нигде :mad:). Так вот функции GDI самые тормозные у Висты, чуть быстрее у Семерки, и значительно быстрее у XP. Особенно заметно в приложениях где много векторной графики типа corel draw и когда открывают много окон. Поэтому у мну на Атлоне 1.8 ггц но под XP 1200 пикселей читаются за 1.2 сек, гораздо быстрее чем на ноуте коредуо под Вистой. :smile:
 

StepanSkvortsov

Новичок
Сообщения
9
Репутация
0
Yashied сказал(а):
А как ты вообще его умудрился запустить на Windows 7, он написан для XP. На 7 вообще ничего этого нет.
Ну уж конечно мы вставили свои пути и названия окон))

На х32 Win7 проц Core2Duo E4600 @ 2.40GHz скрипт выполняет за 0.2 сек.
(композиция и кое-что еще отключено - стандартный рабочий стол w2k ;)
Время при этом не меняется совсем при включении композиции и всего остального аэровского.

Ветка умерла 120 дней назад... Наверное потому что никто больше не стал тестировать другие функции :smile:
 
Верх