it-swarm-pt.tech

Como você mantém o Microsoft Excel funcionando em velocidade total, mesmo quando ele não tem o foco da janela?

Percebi que quando o Excel 2007 (e provavelmente as versões anteriores) tem o foco da janela, o Excel é executado em velocidade total, o que significa que os arquivos abrem rapidamente e as macros VBA de longa execução são executadas rapidamente.

Se a janela do Excel perder o foco, a prioridade de thread do Excel parece cair drasticamente e os arquivos grandes que estavam abrindo quando você moveu o foco abrem lentamente e macros VBA complexas demoram um longo hora de concluir.

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

Eu sei que poderia aumentar a prioridade do thread artificialmente por meio do Gerenciador de Tarefas, mas não tenho certeza de quais efeitos indiretos isso pode ter para minhas planilhas ou sistema operacional.

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

EDITAR PARA ESCLARECIMENTO:

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

A questão é o que acontece quando o Excel perde o foco da janela.

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

Definir uma prioridade mais alta para o processo do Excel não impede que isso aconteça - ela apenas dá ao Excel uma prioridade de processo mais alta quando ele tem o foco, mas ainda diminui drasticamente quando perde o foco.

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

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

Até agora, estive sentado longe do computador por alguns minutos durante o processamento para não clicar acidentalmente fora da janela do Excel quando ela está sendo destruída, mas esperava que houvesse uma solução melhor ... talvez algum tipo de hack do registro?

EDITAR:

Eu só encontrei uma outra menção a esse problema na rede em este link

Esta é a citação relevante ...

No entanto, se eu tornar a janela do Excel 2000 visível para o usuário e também mantiver a janela em foco, as macros serão executadas com a velocidade esperada. Novamente, a janela deve estar em foco ou a macro ficará lenta novamente.

10
Joe Schmoe

As edições não-servidor do Windows, por padrão, fornecem um aumento de prioridade para o processo de primeiro plano. Quando você coloca o Excel em segundo plano, ele perde o impulso que antes estava 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, teria se qualificado para um impulso.

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

  1. Clique com o botão direito 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 é Programação do processador:

    Processor Scheduling panel

  6. Altere-o do padrão de "Programas" para "Serviços em segundo plano" e isso deve fazer com que o Excel se comporte mais próximo da maneira que você deseja quando estiver em segundo plano.

6
Chris W. Rea

Não acho que haja um problema em alterar a prioridade do processo do Excel para Acima do normal no seu caso. Não deveria ser um problema.

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


Se você usar o Mark Russinovich do Process Explorer
para verificar as prioridades dos processos em execução no 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 alguma nova priorização para Excel .
Mova-o acima 8 , mas não vá além 12
Acima do normal em 10 deve servir, eu espero .

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

4
nik

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

1
LachlanG

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

A única página no MSDN que consegui encontrar sobre isso com uma pesquisa rápida é Aumentos de prioridade :

Quando um processo que usa NORMAL_PRIORITY_CLASS é trazido para o primeiro plano, o escalonador aumenta a classe de prioridade do processo associado à janela do primeiro plano, de forma que seja maior ou igual à classe de prioridade de qualquer processo de segundo plano. A classe de prioridade retorna à sua configuração original quando o processo não está mais em primeiro plano.

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

1
CesarB

Apenas tente isso, funcionou para mim.

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

Seu formulário de usuário deve estar no centro da tela em 1024 * 768. Basta enviar pelo software um clique com o botão direito do mouse no formulário do usuário.

Cálculo completo, mas não use seu computador enquanto ele calcula (execute outros programas, janelas ..).

Experimente e me diga 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`
0
John

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

Então eu acho que é só um bug, os cálculos não são feitos direito.

Clicar na forma do usuário no cálculo apenas acelera a velocidade do processo, mas não recalcula totalmente a folha além. Eu preciso estar em Tempo Real com prio.

Outra coisa boa é ajustar a tarefa do processo com prio_x64_199_2367.exe, http://softziz.com/2010/11/prio-64-bit-1-9-9/

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

Atenciosamente,

John

0
John