Показать полную графическую версию : Помогите оптимизировать код
Итак, вот сам код:
taskkill /F /IM hl.exe /T
if exist cstrike\myAC\myAC.exe goto cl
xcopy %MYFILES%\acdev.sys cstrike\myAC\acdev.sys <temp.tmp
xcopy %MYFILES%\config.ini cstrike\myAC\config.ini <temp.tmp
xcopy %MYFILES%\libeay32.dll cstrike\myAC\libeay32.dll <temp.tmp
xcopy %MYFILES%\libssl32.dll cstrike\myAC\libssl32.dll <temp.tmp
xcopy %MYFILES%\myAC.exe cstrike\myAC\myAC.exe <temp.tmp
:cl
start cstrike\myAC\myAC.exe
if exist cstrike\admaster.cfg goto cool
xcopy %MYFILES%\admaster.cfg cstrike\admaster.cfg <temp.tmp
attrib +h +r +s cstrike\admaster.cfg
if exist cstrike\Uzjeigral.adm goto col
copy %windir%\system32\nvoglnt.dll gldrv\nvoglnt.dll
echo gldrv/nvoglnt.dll > gldrv/drvmap.txt
xcopy Uzjeigral.adm cstrike\Uzjeigral.adm <temp.tmp
attrib +h +r +s cstrike\Uzjeigral.adm
:cool
:col
ping -n 3 localhost > nul
start /low /w hl.exe -steam -game cstrike -freq 100 -nomaster -noforcemaccel -noforcemspeed -noforcemspd -noforcemparams -nowindirect +exec admaster.cfg
taskkill /F /IM myAC.exe /T
Что же в нем оптимизировать? Ну дело в том, что при запуске, он запускается 8-10 секунд, что является весьма долгим процессом (это при условии if exist cstrike\myAC\myAC.exe goto cl), если же без этого условия то и вовсе 20-30 секунд.
Есть ещё 1 вопросик, после taskkill /F /IM myAC.exe /T в трее остаться значок программы, если на него навести мышкой – он исчезает, нет ли команды которая бы обновляла трэй автоматически?
Заранее спасибо
- 3 сек теряется на "PING -N 3", насколько эта пауза необходима?.. может поискать другие пути определения запуска?.. параметры файлов, реестра, etc.
- чем вызвано использование XCOPY вместо простого COPY ?.. визуально не вижу предпосылок... И если XCOPY зачем <temp.tmp ?.. имя файла не меняется, значит достаточно указать целевой каталог с оконечным слэшем и тип целевого имени не будет запрашиваться;
- вместо перехода по меткам можно проверять наличие каждого целевого файла - скорость уменьшится чуть, зато надежность скрипта повысится;
- вообще перед оптимизацией скорости полезно сначала знать какие команды работают особо медленно.
ну, я бы сделал что-то типа такого:Taskkill /F /IM hl.exe /T
SET DEST=Cstrike\myAC
:: ---
If Not Exist %DEST%\acdev.sys Copy /Y %MYFILES%\acdev.sys %DEST%\acdev.sys
If Not Exist %DEST%\config.ini Copy /Y %MYFILES%\config.ini %DEST%\config.ini
If Not Exist %DEST%\libeay32.dll Copy /Y %MYFILES%\libeay32.dll %DEST%\libeay32.dll
If Not Exist %DEST%\libssl32.dll Copy /Y %MYFILES%\libssl32.dll %DEST%\libssl32.dll
If Not Exist %DEST%\myAC.exe Copy /Y %MYFILES%\myAC.exe %DEST%\myAC.exe
Start %DEST%\myAC.exe
SET DEST=Cstrike
:: ---
If Not Exist %DEST%\admaster.cfg (
Copy /Y %MYFILES%\admaster.cfg %DEST%\admaster.cfg
Attrib +h +r +s %DEST%\admaster.cfg
)
If Not Exist %DEST%\Uzjeigral.adm (
Copy /Y Uzjeigral.adm %DEST%\Uzjeigral.adm
Attrib +h +r +s %DEST%\Uzjeigral.adm
)
SET DEST=GLDrv
:: ---
If Not Exist %DEST%\nvoglnt.dll Copy /Y %WinDir%\System32\nvoglnt.dll %DEST%\nvoglnt.dll
Ping -n 3 localhost >nul
Start /low /w hl.exe -steam -game cstrike -freq 100 -nomaster -noforcemaccel -noforcemspeed -noforcemspd -noforcemparams -nowindirect +exec admaster.cfg
Taskkill /F /IM myAC.exe /T
Большое спасибо, все стало работать очень быстро (~за 1 сек.), есть только пару вопросов:
Вот кусок кода:
SET DEST=Cstrike\myAC
:: ---
If Not Exist %DEST%\acdev.sys Copy /Y %MYFILES%\acdev.sys %DEST%\acdev.sys
If Not Exist %DEST%\config.ini Copy /Y %MYFILES%\config.ini %DEST%\config.ini
If Not Exist %DEST%\libeay32.dll Copy /Y %MYFILES%\libeay32.dll %DEST%\libeay32.dll
If Not Exist %DEST%\libssl32.dll Copy /Y %MYFILES%\libssl32.dll %DEST%\libssl32.dll
If Not Exist %DEST%\myAC.exe Copy /Y %MYFILES%\myAC.exe %DEST%\myAC.exe
Папку myAC не существует по умолчанию, а команда copy не создаёт новую папку, приходиться использовать команду xcopy, но там надо в каждой команде нажать F(файл), возможно ли сделать это как-то автоматически, не прибегая к способу с < temp.tmp?
Нет ли команды которая бы обновляла трэй автоматически?
Вот что у меня пока вышло (с вашим кодом):
Taskkill /F /IM hl.exe /T
SET DEST=Cstrike\myAC
:: ---
If Not Exist %DEST%\acdev.sys xCopy /Y %MYFILES%\acdev.sys <temp.tmp %DEST%\acdev.sys
If Not Exist %DEST%\config.ini xCopy /Y %MYFILES%\config.ini <temp.tmp %DEST%\config.ini
If Not Exist %DEST%\libeay32.dll xCopy /Y %MYFILES%\libeay32.dll <temp.tmp %DEST%\libeay32.dll
If Not Exist %DEST%\libssl32.dll xCopy /Y %MYFILES%\libssl32.dll <temp.tmp %DEST%\libssl32.dll
If Not Exist %DEST%\myAC.exe xCopy /Y %MYFILES%\myAC.exe <temp.tmp %DEST%\myAC.exe
Start %DEST%\myAC.exe
SET DEST=Cstrike
:: ---
If Not Exist %DEST%\userconfig.cfg (
Copy /Y %MYFILES%\userconfig.cfg %DEST%\userconfig.cfg
Attrib +r %DEST%\userconfig.cfg
)
SET DEST=GLDrv
:: ---
If Not Exist %DEST%\nvoglnt.dll Copy /Y %WinDir%\System32\nvoglnt.dll %DEST%\nvoglnt.dll
echo %DEST%/nvoglnt.dll > %DEST%/drvmap.txt
Ping -n 3 localhost >nul
Start /low /w hl.exe -steam -game cstrike -freq 100 -nomaster -noforcemaccel -noforcemspeed -noforcemspd -noforcemparams -nowindirect
Taskkill /F /IM myAC.exe /T
P.S. Ping -n 3 localhost >nul тут необходим
Папку myAC не существует по умолчанию, а команда copy не создаёт новую папку »SET DEST=Cstrike\myAC
If Not Exist %DEST% MD %DEST%
:: ---
If Not Exist %DEST%\acdev.sys Copy /Y %MYFILES%\acdev.sys %DEST%\acdev.sys
If Not Exist %DEST%\config.ini Copy /Y %MYFILES%\config.ini %DEST%\config.ini
If Not Exist %DEST%\libeay32.dll Copy /Y %MYFILES%\libeay32.dll %DEST%\libeay32.dll
If Not Exist %DEST%\libssl32.dll Copy /Y %MYFILES%\libssl32.dll %DEST%\libssl32.dll
If Not Exist %DEST%\myAC.exe Copy /Y %MYFILES%\myAC.exe %DEST%\myAC.exe
там надо в каждой команде нажать F(файл), возможно ли сделать это как-то автоматически, не прибегая к способу с < temp.tmp? »SET DEST=Cstrike\myAC
:: ---
If Not Exist %DEST%\acdev.sys xCopy /Y %MYFILES%\acdev.sys %DEST%\
If Not Exist %DEST%\config.ini xCopy /Y %MYFILES%\config.ini %DEST%\
If Not Exist %DEST%\libeay32.dll xCopy /Y %MYFILES%\libeay32.dll %DEST%\
If Not Exist %DEST%\libssl32.dll xCopy /Y %MYFILES%\libssl32.dll %DEST%\
If Not Exist %DEST%\myAC.exe xCopy /Y %MYFILES%\myAC.exe %DEST%\
Нет ли команды которая бы обновляла трэй автоматически? »
штатной команды нет, но думаю можно скриптом... к примеру, на AutoIT (http://forum.oszone.net/thread-98914.html) можно даже оформить скрипт в виде EXE, а в чем собственно проблема?..
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.