Quando os aplicativos demoram para serem iniciados, com que rapidez o processo é registrado como sendo executado?

1

Estou analisando um problema com um aplicativo de quiosque da web java. Eu ocasionalmente recebo um ticket de suporte dizendo que várias instâncias do aplicativo foram encontradas ao mesmo tempo em um PC. Isso causa problemas com o aplicativo que se conecta ao banco de dados derby local em cada quiosque PC. O problema é esporádico e incomum.

Agora, descobri que, ocasionalmente, os PCs com quiosque executam varreduras de vírus, durante os quais o processo do scanner fecha a tampa e maximiza a CPU. Se isso estiver acontecendo, a inicialização do aplicativo a partir da área de trabalho pode levar até cinco minutos enquanto o computador deficiente finalmente consegue espaço suficiente para iniciar um novo programa. Eu suspeito que nossos clientes apóiem as pessoas, depois de lidar com algum problema ou outro em qualquer PC, reabrirão o aplicativo, ficarão frustrados por não estarem sendo lançados e, em seguida, abrirem mais algumas instâncias até que finalmente sejam executadas.

Eu pretendo adicionar algo assim para o script de lançamento manual para detectar se o aplicativo já está em execução, mas se o PC for bloqueado, não sei se o processo será detectado ou não.

No cenário acima, onde um programa demora para ser lançado, seu processo será detectado imediatamente, ou não até mais tarde, quando abrir sua janela ou algo assim? Eu posso escrever um programa com alguns threads executando métodos ocupados que maximizem a CPU - seria uma coisa tão precisa ser uma simulação para testes, ou eu precisaria também continuamente pegar identificadores de arquivos, ou algo mais?

    
por Numeron 17.06.2014 / 03:46

1 resposta

0

Simule um PC atolado com uma tarefa de alta prioridade que carregou toda a CPU, o que deve lhe dar tempo suficiente para testar. Programas de benchmark como prime e intelburn e outros, quando configurados para carregar todos os núcleos de cpu disponíveis e configurados para alta prioridade, irão impedir que outros programas obtenham fatias de tempo de cpu, o que é uma maneira de suspender incidentalmente outros processos.

A prioridade pode ser ajustada através do gerenciador de tarefas, ou usando o comando > Start, que funciona no xp e 7.

Você também pode fazer uma suspensão real no win7 e eu suponho que 8, o monitor Resources pode definir um processo para suspender, isso o impediria de ser testado.

Eu uso o método PV para diferentes propósitos. Algumas delas são realmente antigas e não utilizadas, por causa do sistema mais rápido, mas testadas.

Executar se não estiver em execução

Alternar

echo OFF
C:\Desk\batch\pv.exe -q -c SHOWCALC.exe >nul
    if ERRORLEVEL 1 goto Process_NotFound
    start /B "beeps" C:\Desk\batch\wav.exe C:\WINDOWS\Media\AppSounds\calcC.wav
    EXIT

    :Process_NotFound
    start /B "beeps" C:\Desk\batch\wav.exe C:\WINDOWS\Media\AppSounds\ControlPanO.wav
    start /B "SHOWCALC window" "C:\desk\SHOWCALC.exe"
    EXIT

Traga a execução para frente (-a) se estiver em execução, caso contrário, execute-o

echo OFF
C:\Desk\batch\pv.exe -q Photoshop.exe >nul
if ERRORLEVEL 1 goto Process_NotFound
:Process_Found
C:\Desk\batch\pv.exe -q -a Photoshop.exe >nul
exit
:Process_NotFound
start /B "beeps" C:\Desk\batch\wav.exe C:\WINDOWS\Media\AppSounds\adobeeo.wav
start /B "PhotoShop" "C:\Program Files\Adobe\Adobe Photoshop CS2\Photoshop.exe"
EXIT

Mate coisas e execute alta prioridade

C:\Desk\batch\pv.exe -qc dllhost.exe
net stop Themes
C:\Desk\batch\kill.exe -f explorer.exe
C:\Desk\batch\pv.exe -qc dllhost.exe
C:\Desk\batch\pv.exe -qkf AtiTool.exe

start /B "MassEffect"  /HIGH /WAIT "E:\game\ME\Mass Effect\Binaries\MassEffect.exe"
net start Themes
start /B "splorer" explorer.exe

Nunca tive nenhum problema com conflitos, mas como você pode ver, muitas vezes tenho algum som sendo tocado para dizer ao humano o que está acontecendo.
A maioria deles você pode apertar o botão de novo e de novo, e ele apenas faz o que deve fazer, mas o sistema não fica lento. A maioria dos programas aparece como sendo executada nessas listas e gerenciadores de tarefas assim que o processo é iniciado, antes mesmo de existir uma janela para eles. Mas como um programa funciona / começa, suas dependências (digamos, como .net ou java) e de que maneira ele é iniciado ou com pré-requisitos e partes de lote e tudo, podem fazer grandes diferenças na rapidez com que o processo principal do programa foi observado pelo sistema.

Definir prioridade com Iniciar, usando alta, mas não em tempo real (em tempo real ruim), pode lhe dar uma vantagem sobre os programas antivírus e, em um quiosque com um único programa em execução, não faria mal a mais nada?

Há sempre maneiras, mesmo com um programa altamente protegido, de definir esse programa ofensivo para uma prioridade mais baixa, embora, de fato, o barramento fale e a saturação da unidade possa acabar precisando também de uma base de E / S. Existem programas que possuem opções para encobrir e afinar suas próprias E / S, mas eu ainda não vi uma maneira de fazer isso em qualquer programa.

    
por 17.06.2014 / 04:55