Что нового

[Автоматизация] Как правильно: EnvUpdate ( ) ставить ДО или ПОСЛЕ #Include <...

akoulev

Новичок
Сообщения
169
Репутация
2
Начало скрипта:
Код:
#Include <Misc.au3>
#Include <Restart.au3>
EnvUpdate ( )


Возникает мыслишка: а правильно ли это? Может, "нуно" ставить:

Код:
EnvUpdate ( )
#Include <Misc.au3>
#Include <Restart.au3>
...


Интуитивно выбираю 1-й вариант - но, возможно, я неправ? Что скажут Уважаемые Гуру с точки зрения Большой Науки?
 

SyDr

Сидра
Сообщения
651
Репутация
158
Что значит "правильно"?
Проделай следующие действия:
Открой первый файл для включения (Misc.au3)
Полностью скопируй его содержимое.
Вставь его в свой скрипт на место строки #Include <Misc.au3>
Тоже самое проделай с остальными файлами для включения.
Если после этого ты считаешь, что скрипт выглядит "правильно" - значит и до копирования-вставки он выглядел "правильно".

А вообще, если включённый файл не влияет на работу оператора, или блока операторов, то его вполне можно включать после этого блока операторов.
 
Автор
A

akoulev

Новичок
Сообщения
169
Репутация
2
SyDr сказал(а):
Что значит "правильно"?
"Правильно" значит "скрипт работает наиболее стабильно и быстро - что происходит при оптимальном расположении операторов."
Итак, Твоё мнение: верен именно 2-й вариант; а мой "интуитивный" - неверен; правильно я Тебя понял?

Hint: крепко подозреваю, что рекоменованный Тобой эксперимент даст "на выходе" практически одинаковую производительность системы, - при отличии, нераспознаваемом на нынешних много-ГигаГерцовых процесорах при -фактически- мгновенном быстродействии нынешней памяти => особого практического смысла в ём (эксперименте) нет. Почему я и аппелирую к Большой Науке - это отнюдь не случайно и не просто симпатичный фразеологический оборот-с...
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
akoulev [?]
"Правильно" значит "скрипт работает наиболее стабильно и быстро - что происходит при оптимальном расположении операторов."
именно в данной постановке вопроса - разницы никакой, ибо эти функции между собой не коррелируют
А по поводу нынешних процессоров ничего не понял. Если один скрипт быстрее другого на концепцуальном уровне, то независимо от абсолютного значения времени выполнения тенденция этой самой быстроты сохранится. Нужно апеллировать на относительные значения. А они скажут - как эту тройку ни крути, будешь получать в среднем одинаковый результат.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
akoulev [?]
рекоменованный Тобой эксперимент даст "на выходе" практически одинаковую производительность системы
Этот эксперимент покажет нужно ли ставить EnvUpdate() после или до #includ'а. Хотя как мне кажется это была реторическая наводка. Нужно просто иметь представление того, что содержит в себе тот или иной include, и тогда можно точно знать что будет если поставить до или после. В этом случае разницы нет никакой. Да и вообще зачем использовать EnvUpdate?
 
Автор
A

akoulev

Новичок
Сообщения
169
Репутация
2
CreatoR сказал(а):
Да и вообще зачем использовать EnvUpdate?
Ну, лично я пришёл к использованию EnvUpdate после того, как возник эффект множественных мелких глюков при циклическом многократном (очень многие сотни раз - малые тысячи раз) запуске мелких скриптов из управляющего скрипта. Кои глюки исчезли после простановки EnvUpdate как в начале скрипта, так и при выходе из него. С тех пор я предпочитаю "не дожидаться приключений", а так и ставлю дважды в каждом моём скрипте EnvUpdate: панацеей оно, разумется, не является ;D - но уж ухудшать ситуацию точно не будет. По-моему, так. (с) Милн.
 

SyDr

Сидра
Сообщения
651
Репутация
158
Я пока ничего не советовал :smile:
akoulev [?]
"Правильно" значит "скрипт работает наиболее стабильно и быстро - что происходит при оптимальном расположении операторов."
Если действия этих операторов не связаны между собой - нет никакой разницы, в каком порядке их ставить. К примеру:
Код:
$a = $b + $c
$d = $e + $f

и
Код:
$d = $e + $f
$a = $b + $c

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

Добавлю, что обычно принято включать файлы в самом начале скрипта.
И, также, если включённый файл создаёт какие-либо глобальные переменные, то включать файл необходимо до использования этих переменных.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
akoulev, по AutoIt нет пока "Больших" книг, а есть только некоторые рекомендаций + оффициальный форум, где присутствуют разработчики. Это и есть "Большая" наука. Поэтому не нужно изобретать велосипед, делай так, как делают остальные, т.е. включай UDF'ы в начале скрипта, оформляй код в соответствии с Tidi, соответствующим образом называй переменные и т.д.

В большинстве случаев, #Include используется для подключения дополнительных библиотек, а правильно написанная библиотека содержит все необходимое в себе и не должна нуждаться в дополнительных телодвижениях.

Я рекомендую придерживаться следующей структуры скрипта:

Код:
; Описание программы и другая дополнительная информация

#cs ----------------------------------------------------------------------------

    AutoIt Version: 3.3.6.1
    Author:         akoulev

    Script Function:
	    Циклический многократный (очень многие сотни раз - малые тысячи раз) запуск мелких скриптов

#ce ----------------------------------------------------------------------------

; AutoIt3Wrapper директивы (если необходимо)

#Region
#AutoIt3Wrapper_Icon=MyProgram.ico
#AutoIt3Wrapper_Run_Au3Check=n
#AutoIt3Wrapper_UseUpx=n
#EndRegion

; Подключаемые библиотеки

#Include <Constants.au3>

; Необходимые глобальные настройки

Opt('MustDeclareVars', 1)

; Объявление всех глобальных переменных и констант

Global $EnvUpdateCount = 0

; Основной код (цикл) программы

While 1
	_MultiEnvUpdate()
	Sleep(1000)
WEnd

; Дополнительные функции

Func _MultiEnvUpdate()
	EnvUpdate()
	$EnvUpdateCount += 1
EndFunc   ;==>_MultiEnvUpdate



akoulev сказал(а):
Ну, лично я пришёл к использованию EnvUpdate после того, как возник эффект множественных мелких глюков при циклическом многократном запуске мелких скриптов из управляющего скрипта. Кои глюки исчезли после простановки EnvUpdate как в начале скрипта, так и при выходе из него. С тех пор я предпочитаю "не дожидаться приключений", а так и ставлю дважды в каждом моём скрипте EnvUpdate...

А если ты обнаружишь что в каком-то из твоих скриптов возникает намного меньше глюков, если добавить в начале следующую строку:

Код:
_GDIPlus_Startup()


Тогда ты будешь ее ставить везде где не попадя?

Программирование, это такая штука, где каждая написанная тобой буква в коде программы должна быть тебе абсолютно понятна. Если скрипт работает более стабильно при добавлении EnvUpdate(), то значит где-то оно используется, и необходимо разобраться где именно и для чего, а не делать сразу же вывод, что мол везде лучше ставить EnvUpdate() и будет тебе счастье. Если бы это действительно было необходимо, то разработчики это сделали бы сами.
 
Автор
A

akoulev

Новичок
Сообщения
169
Репутация
2
Yashied сказал(а):
... где каждая написанная тобой буква в коде программы должна быть тебе абсолютно понятна.
Спасибо; постараюсь учесть. И огромное спасибо - за рекомендуемую форму "заготовки".
 
Верх