Como você mantém o Microsoft Excel rodando a toda velocidade mesmo quando não tem o foco da janela?

9

Tenho notado que quando o Excel 2007 (e provavelmente versões anteriores) tem o foco da janela, o Excel é executado em velocidade máxima, o que significa que os arquivos abrem macros VBA rápidas e de execução longa executadas rapidamente.

Se a janela do Excel perder o foco, a prioridade de thread do Excel parece cair drasticamente e arquivos grandes que estavam se abrindo quando você movia o foco abrem lentamente, e macros VBA complexas levam um tempo longo para completo.

Existe alguma maneira de manter a prioridade do Excel alta independentemente de estar focada ou não?

Sei que posso aumentar a prioridade do thread artificialmente através do Gerenciador de Tarefas, mas não tenho certeza sobre os efeitos que isso pode ter em minhas planilhas ou SO.

Meu sistema é um Dual Core rápido com 4Gb de RAM e está executando o Vista 64.

EDITAR PARA ESCLARECIMENTO:

Meu problema não é simplesmente aumentar a prioridade do processo do Excel através do Gerenciador de Tarefas, porque isso somente afeta o Excel quando ele tem o foco da janela.

O ponto é o que acontece quando o Excel perde o foco da janela.

A partir do uso extensivo do Excel, parece que, por design , ele reduz deliberadamente sua própria prioridade de processo quando a janela do Excel não tem foco.

A definição de uma prioridade mais alta para o processo do Excel não impede que isso aconteça. Isso só dá ao Excel uma prioridade de processo mais alta quando tem o foco, mas ainda assim diminui drasticamente quando perde o foco.

No uso normal do Excel (provavelmente 99% de todos os usuários), você não notaria esse efeito, mas com uma planilha enorme (cerca de 2000 planilhas, eu acho) e Macros VBA complexas que levam alguns minutos para serem executadas, efeito é muito perceptível.

Idealmente, eu preciso manter a mesma prioridade de thread, independentemente de a janela do Excel estar focada.

Até agora, acabei de me sentar do computador por alguns minutos durante o processamento para não clicar acidentalmente na janela do Excel quando estiver processando, mas esperava que houvesse uma solução melhor. .. talvez um registro hack de algum tipo?

EDITAR:

Eu só encontrei uma outra menção desta questão na rede em este link

Esta é a citação relevante ...

However, if I make the Excel 2000 window visible to the user and also keep the window in focus, the macros execute with their expected speed. Again, the window must have focus or the macro slows to a crawl again.

    
por Joe Schmoe 17.07.2009 / 00:41

7 respostas

6

As edições sem servidor do Windows, por padrão, fornecem um aumento de prioridade ao processo em primeiro plano. Quando você pressiona o Excel para o plano de fundo, ele perde o impulso anteriormente em primeiro plano; algum outro programa ganha o aumento de prioridade.

Você pode alterar uma configuração para que os programas não recebam mais esse impulso. Nota: Isso não afetará apenas o Excel, mas qualquer programa que de outra forma se qualificaria para um aumento.

Veja como ajustar a configuração no Windows XP:

  1. Clique com o botão direito do mouse em Meu computador .
  2. Escolha Propriedades .
  3. Clique na guia Avançado .
  4. No painel Desempenho , clique no botão Configurações .
  5. Clique na guia Avançado . O primeiro painel é Agendamento do processador :

  6. Altere-odopadrãode"Programas" para "Serviços de segundo plano" e isso fará com que o Excel se comporte da maneira que você deseja quando estiver em segundo plano.

por 30.10.2009 / 14:59
4

Não acredito que haja um problema ao alterar a prioridade do processo do Excel para Acima do Normal no seu caso. Não deveria ser um problema.

Não o torne mais alto , onde ele competirá com os processos do sistema.
Não suspenda , ou você pode ter outras coisas suspensas nele!

Se você usar o Process Explorer do Mark Russinovich strong>
observar as prioridades dos processos em execução no seu sistema.
Mostra os seguintes valores de prioridade e sua associação.

24 Realtime
13 High         : procexp.exe itself is here, with winlogon, csrss
11              : smss is actually at 11
10 Above Normal :
 9              : lsass, services.exe are here
 8 Normal       : Most things are here
 6 Below Normal
 4 Idle

Você poderia usar process explorer e tentar uma nova priorização para o Excel .
Mova-o acima de 8 , mas não ultrapasse 12 , Acima do Normal em 10 , espere.

Na mesma linha, se você acha que algum processo está ocupando muito tempo do processador enquanto não está em foco, você pode diminuir sua prioridade até Inativo . Eu costumo usar essa técnica para isso.

    
por 17.07.2009 / 09:00
2

Há algumas coisas diferentes a considerar aqui: Quando você altera a prioridade de um processo, essa prioridade básica é herdada por todos os seus threads e por outros processos iniciados. A prioridade atual é feita a partir da prioridade básica e de vários fatores que determinam se ela deve ser reforçada ou não - estar em primeiro plano não necessariamente aumenta a prioridade, mas coisas como sair de um estado de espera ou fazer alguma IO podem dê um pequeno impulso temporário.

Eu sugeriria que executar o processo do Excel com uma alta prioridade ao trabalhar com essas pastas de trabalho muito intensas poderia fazer sentido, e eu diria que um segundo atalho chamado "Excel de alta prioridade" pode ser uma boa maneira de fazer isso. Primeiro, faça um arquivo em lote de uma linha que execute o comando start com os switches apropriados, por exemplo:

start "high priority excel" /max /high "C:\Program Files\Microsoft Office\Office12\EXCEL.EXE"

(em uma versão de 64 bits do Windows, isso seria start "high priority excel" /max /high "C:\Program Files (x86)\Microsoft Office\Office12\EXCEL.EXE" , a menos que você também esteja executando uma versão de 64 bits do Office, que está disponível somente para 2010 em diante start "high priority excel" /max /high "C:\Program Files\Microsoft Office\Office14\EXCEL.EXE" ) Observe que o título da janela pode ser o que você quiser, mas não é opcional.

Agora salve isso como, por exemplo, HiperExcel.cmd em algum lugar útil - talvez a pasta office, ou uma pasta c: \ scripts ou algo assim, ou sua pasta pessoal, para que isso possa fazer roaming de máquina para máquina. Crie um novo atalho que aponte para este arquivo, torne a pasta de início a pasta onde o arquivo é mantido. Escolha um ícone para o arquivo - navegue até o executável Excel.exe e escolha algo diferente do ícone do Excel usual para maior clareza.

Clique no seu novo atalho e ele invocará o Excel sendo executado como um processo de alta prioridade, com uma prioridade básica de 13 e quando executado provavelmente obterá a prioridade máxima para processos em tempo real de 15. Mesmo que algo chegue um impulso, não deve ter maior prioridade. Observe que o processo de primeiro plano NÃO recebe um aumento de prioridade apenas por estar em primeiro plano (não desde o NT4.0). Então, o que está acontecendo?

Recapitule o que sabemos até agora: os processos se revezam de acordo com a prioridade, mas não com a exclusão absoluta de processos de baixa prioridade (bem, os threads realmente, mas vamos manter os processos em mãos para facilitar a discussão). O que acontece quando um processo recebe seu "turno"? Ele começa a correr por uma unidade de tempo chamada quantum. Quanto tempo é um quantum? Depende ...

É nesse ponto que o processo de primeiro plano usa mais recursos - quando ocorre uma curva, esse turno pode durar três vezes mais do que os turnos dos processos de segundo plano. Por isso, pode não ser muito frequente (dependendo da prioridade), mas quando isso acontece, ele o detém por mais tempo.

Você pode optar por usar quantums curtos ou longos (o padrão é curto no SO da estação de trabalho, long em servidores) e ter o processo de foreground aumentado ou não (variável para w / s, fixo para servidores por padrão) e impulsionado, por quanto (efetivamente até 3 vezes). Agora, a parte complicada disso é que, se você escolher mudar o multiplicador, acabará tendo tudo com valores muito curtos para o quantum, ao passo que, se você desabilitar o primeiro plano, tudo terá um valor maior, mas igual. Se você desativá-lo, é claro, os serviços de janelas de segundo plano obtêm o mesmo quantum que os aplicativos do usuário, o que pode não ser o ideal. Você precisa definir o valor no registro em: HKLM \ System \ CurrentControlSet \ Control \ PriorityControl \ Win32PrioritySeparation, usando uma máscara de bits. Para facilitar as coisas, os valores mais prováveis que você deseja são:

2 = valor padrão, significa usar padrões com aumento máximo. os padrões na estação de trabalho O / S são curtos e variáveis. 8 = quantum fixo e curto (o primeiro plano e o fundo são iguais) 40 (decimal, x28 hex) = fixo e longo (isto é o mesmo que os padrões do servidor) 36 (decimal, x24 hex) = curto, variável, mas mínimo impulso para o processo de primeiro plano. Eu acho que este é o que provavelmente lhe dará mais benefícios para reduzir a quantidade que outros aplicativos competem, mas permitir que o Excel obtenha mais recursos quando em primeiro plano (contanto que você também aumente sua prioridade).

Experimente e veja, espero que isso ajude - sua milhagem pode variar, é claro.

Além de: Muitos outros aplicativos ou processos não têm a CPU como gargalo - seus exemplos de sincronização do Outlook e navegação do IE provavelmente têm a rede e, possivelmente, para o Outlook algum disco rígido como fatores mais importantes em sua velocidade. ou não, o impacto no desempenho visível está provavelmente abaixo do que você pode ver pela simples observação.

    
por 30.10.2009 / 13:52
1

Não há problema em aumentar a prioridade de um processo para "acima do normal" ou "alto", apenas não o defina como "em tempo real". Não posso ajudá-lo com o Excel, especificamente, desculpe.

    
por 17.07.2009 / 01:00
1

É possível que a manipulação de prioridade esteja sendo feita não pelo Excel, mas pelo próprio Windows. O Windows possui um mecanismo onde a prioridade dos processos com janelas no primeiro plano é aumentada; Assim, quando o Excel perde o foco, sua prioridade volta ao normal (o que é um pouco menor).

A única página no MSDN que eu encontrei com uma pesquisa rápida é Priority Aumenta :

When a process that uses NORMAL_PRIORITY_CLASS is brought to the foreground, the scheduler boosts the priority class of the process associated with the foreground window, so that it is greater than or equal to the priority class of any background processes. The priority class returns to its original setting when the process is no longer in the foreground.

Pelo que ouvi, existem maneiras de desativar esse aumento de prioridade.

    
por 17.07.2009 / 13:43
0

Apenas tente isso, funcionou para mim.

Não é muito bom, mas na verdade apenas dobrou minha velocidade de cálculo! Surpreendente! (mas vou verificar os resultados, não tenho certeza sobre eles ...)

Seu usuário deve estar no centro da tela em 1024 * 768. Apenas envia por software um clique direito sobre o userform.

Cálculo completo, mas não use seu computador enquanto calcula (inicie outros programas, windows ..).

Apenas tente me dizer como funcionou para você!

'In General
Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal Y As Long) As Long
Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Private Const MOUSEEVENTF_LEFTDOWN = &H2
Private Const MOUSEEVENTF_RIGHTDOWN As Long = &H8
Private Const MOUSEEVENTF_RIGHTUP As Long = &H10

Private Sub Optimizer()
    'activate the window
    'AppActivate "Inbox - Microsoft Outlook"
    'move the cursor where you need it, I guessed at 200,200
    'Warning here : check the center coordinates of your userform!
    SetCursorPos 512, 374
    'send a down event
    mouse_event MOUSEEVENTF_RIGHTDOWN, 0&, 0&, 0&, 0&
    'and an up
    mouse_event MOUSEEVENTF_RIGHTUP, 0&, 0&, 0&, 0&
End Sub

'Inside your code
Call Optimiser'
    
por 21.06.2011 / 22:01
0

Após uma longa noite de cálculo de velocidade máxima, e após a verificação, os resultados desta manhã foram ... totalmente errados.

Então, acho que é apenas um bug, os cálculos não são feitos corretamente.

Clicar na forma de usuário no cálculo apenas acelera a velocidade do processo, mas não recalcula completamente a planilha. Eu preciso que eu estava em tempo real com o prio.

Outra coisa interessante é ajustar a tarefa de processo com prio_x64_199_2367.exe, link

Isso salva sua prioridade de processo definida com CTRL ALT DEL, dentro do gerenciador de tarefas, para usos futuros.

Atenciosamente,

John

    
por 22.06.2011 / 20:20