Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Помогите оптимизировать код (http://forum.oszone.net/showthread.php?t=104399)

n4! 05-04-2008 14:53 775284

Помогите оптимизировать код
 
Итак, вот сам код:
Код:

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 в трее остаться значок программы, если на него навести мышкой – он исчезает, нет ли команды которая бы обновляла трэй автоматически?
Заранее спасибо

amel27 07-04-2008 08:58 776406

- 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


n4! 08-04-2008 01:13 777107

Большое спасибо, все стало работать очень быстро (~за 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 тут необходим

amel27 08-04-2008 05:59 777163

Цитата:

Цитата n4!
Папку 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

Цитата:

Цитата n4!
там надо в каждой команде нажать 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%\

Цитата:

Цитата n4!
Нет ли команды которая бы обновляла трэй автоматически? »

штатной команды нет, но думаю можно скриптом... к примеру, на AutoIT можно даже оформить скрипт в виде EXE, а в чем собственно проблема?..


Время: 14:05.

Время: 14:05.
© OSzone.net 2001-