Что нового

[Окна, Диалоги] Изменение потребления памяти при разных параметрах состояния окна.

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Всем добрый день.
При использовании окна из этого примера Yashied`a случайно обратил внимание на следующее:
При запуске этого скрипта (скомпилированного), потребление памяти составляет ~10,5 Мб.
Если его свернуть, то резко уменьшается до 0,8 - 1,0 Мб.
Если развернуть его обратно, то - 2,5 - 3,0 Мб.
Почему? Не понимаю.
Попробовал заменить обычный
Код:
GUISetState() ;на

GUISetState(@SW_SHOW, $hGUI)
GUISetState(@SW_MINIMIZE, $hGUI)
GUISetState(@SW_RESTORE, $hGUI)
В результате потребление памяти сразу составляет 1,5 - 3,0 Мб.
Почему? Опять не понимаю.

Не могли бы знатоки AutoIt объяснить, почему такое происходит и нельзя ли уменьшить потребление памяти более цивилизованным способом.
Спасибо.
 

Yashied

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

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
madmasles [?]
Если его свернуть, то резко уменьшается
Это поведение системы, это проявляется на всех приложениях.

Yashied [?]
Оно полезно только один раз, например после длинных и ресурсоёмких операций, с GUI это не пройдёт, при сворачиваний и восстановлений окна память выделяется снова. И это естественно, для граффики нужно больше памяти :smile:
 
Автор
madmasles

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Yashied
Добавил в этот Ваш пример: пример
Код:
GUISetState()
$PID = ProcessExists(@ScriptName)
_WinAPI_EmptyWorkingSet($PID)
И потребление памяти при открытии окна сократилось до 1,5 - 3,0 Мб.
Большое спасибо!
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Вместо
Код:
$PID = ProcessExists(@ScriptName)

лучше использовать
Код:
@AutoItPID

;)


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

madmasles [?]
потребление памяти при открытии окна сократилось до 1,5 - 3,0 Мб
А какой у этого толк, если пользователь свернёт и потом развернёт окно?
 
Автор
madmasles

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
CreatoR [?]
А какой у этого толк, если пользователь свернёт и потом развернёт окно?

...При запуске этого скрипта (скомпилированного), потребление памяти составляет ~10,5 Мб.
Если его свернуть, то резко уменьшается до 0,8 - 1,0 Мб.
Если развернуть его обратно, то - 2,5 - 3,0 Мб...
А при использовании _WinAPI_EmptyWorkingSet(@AutoItPID) (спасибо за подсказку про макрос), с самого начало, независимо от сворачиваний-разворачиваний, потребляет 1,5 - 3,0 Мб. (У меня).
 

Yashied

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

При старте любого AutoIt скрипта, памяти выделяется немеренно. Вызвав один раз _WinAPI_EmptyWorkingSet() эта проблема решается (в данном случае с 10 МБ до 3 МБ). Как я заметил, дальнейшие "телодвижения" столько памяти уже не затребуют. Еще полезно вызывать _WinAPI_EmptyWorkingSet() после удаления дочерних GUI (если это необходимо). IMHO, в наш век, когда космические корабли бороздят просторы вселенной, заботиться о нескольких МБ памяти бессмысленно. Я использую эту функцию только в резидентных программах и только один раз при старте скрипта.



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

madmasles сказал(а):
_WinAPI_EmptyWorkingSet(@AutoItPID) (спасибо за подсказку про макрос)...

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

[quote author=WinAPIEx Help]$PID - The PID of the process. Default (0) is the current process.[/quote]
 
Автор
madmasles

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Yashied [?]
А если почитать справку для этой функции
OffTopic:
К моему глубокому сожалению, с английским языком я не дружу, как и он со мной, хотя сдавал когда-то по нему гос.экзамен :smile:, правда это было очень давно (1982).
Справку по Вашей замечательной UDF в основном читаю через Google Translator, а У разработчиков Googlа есть чувство юмора :smile:
 
Верх