Comment maintenez-vous Microsoft Excel en cours d'exécution, même s'il n'a pas le focus sur la fenêtre?

J'ai remarqué que lorsque Excel 2007 (et probablement des versions antérieures) a la mise au point de la fenêtre, Excel s'exécute à pleine vitesse, ce qui signifie que les fichiers s'ouvrent rapidement et les macros VBA de longue durée s'exécutent rapidement.

Si la fenêtre Excel perd la mise au point, la priorité du thread d'Excel semble tomber de manière spectaculaire et les fichiers volumineux qui s'ouvraient lorsque vous avez déplacé la mise au point s'ouvrir lentement, et les macros VBA complexes prennent beaucoup de temps à compléter.

Y a-t-il un moyen de maintenir la priorité sur Excel, qu'elle soit concentrée ou non?

Je sais que je pourrais augmenter la priorité du thread artificiellement via le Gestionnaire des tâches, mais je ne suis pas sûr de ce que les effets secondaires pourraient avoir pour mes feuilles de calcul ou les systèmes d'exploitation.

Mon système est un Dual Core rapide avec 4Gb de RAM et exécute Vista 64.

ÉDITION POUR LA CLARIFICATION:

Mon problème ne consiste pas seulement à augmenter la priorité du processus Excel via le Gestionnaire des tâches, car cela n'affecte que Excel lorsqu'il a la mise au point de la fenêtre.

Le point est ce qui se passe lorsque Excel perd la mise au point de la fenêtre.

En utilisant largement Excel, il semble que, par conception , il abaisse délibérément sa propre priorité de processus lorsque la fenêtre Excel n'a pas de focus.

Définir une priorité plus élevée pour le processus Excel n'empêche pas que cela ne se produise – il ne donne à Excel qu'une priorité de processus plus élevée lorsqu'il a la mise au point, mais il continue de creuser de façon spectaculaire quand il perd son focus.

Dans l'utilisation normale d'Excel (probablement 99% de tous ceux qui l'utilisent), vous ne remarquerez pas cet effet, mais avec une feuille de calcul massive (environ 2000 feuilles de calcul, je pense) et des macros VBA complexes qui durent quelques minutes à exécuter, l'effet est très perceptible.

Idéalement, j'ai besoin de garder la même priorité de thread indépendamment du fait que la fenêtre Excel soit concentrée.

Jusqu'à présent, je viens d'être assis de l'ordinateur pendant quelques minutes pendant le traitement, de sorte que je ne clique pas accidentellement sur la fenêtre Excel quand elle se déchire, mais j'espérais simplement qu'il y avait une meilleure solution … peut-être Un hack de registre de quelque sorte?

MODIFIER:

Je n'ai jamais trouvé une autre mention de ce problème sur le net à ce lien

C'est la citation pertinente …

Cependant, si je rends la fenêtre Excel 2000 visible pour l'utilisateur et que la fenêtre se concentre, les macros s'exécutent avec leur vitesse attendue. Encore une fois, la fenêtre doit avoir la mise au point ou la macro ralentir à nouveau.

Les éditions Windows non-serveur, par défaut, fournissent une impulsion prioritaire au processus de premier plan. Lorsque vous poussez Excel à l'arrière-plan, il perde l'augmentation qu'il avait antérieurement au premier plan; Un autre programme gagne plutôt l'impulsion prioritaire.

Vous pouvez modifier un paramètre pour que les programmes ne reçoivent plus cette impulsion. Remarque: Cela n'affectera pas seulement Excel, mais tout programme qui aurait autrement qualifié pour un coup de pouce.

Voici comment modifier le paramètre dans Windows XP:

  1. Cliquez avec le bouton droit de la souris sur Poste de travail .
  2. Choisissez Propriétés .
  3. Cliquez sur l'onglet Avancé .
  4. Dans le panneau Performance , cliquez sur le bouton Paramètres .
  5. Cliquez sur l'onglet Avancé . Le premier panneau est la planification du processeur :

    Panneau de planification du processeur

  6. Modifiez-le de la valeur par défaut de "Programmes" à "Services d'arrière-plan" et cela devrait amener Excel à se rapprocher de la façon dont vous le souhaitez lorsqu'il est en arrière-plan.

Je ne pense pas qu'il y ait un problème avec la modification de la priorité de processus Excel sur Above Normal dans votre cas. Cela ne devrait pas poser de problème.

Ne le rendez pas plus haut , où il sera en concurrence avec les processus système.
Ne le suspendez pas, ou vous pouvez en suspendre d' autres choses!


Si vous utilisez l'Explorateur de processus de Mark Russinovich
Pour examiner les priorités des processus en cours d'exécution sur votre système.
Il montre les valeurs prioritaires suivantes et leur association.

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 

Vous pouvez utiliser l' explorateur de processus et essayer une nouvelle priorisation pour Excel .
Déplacez-le au-dessus de 8 , mais ne dépassez pas 12
Au-dessus de Normal à 10 devrait faire, je m'attends.

Dans le même ordre d'idées, si vous pensez que certains processus prennent trop de temps de processeur sans être focalisés, vous pouvez réduire votre priorité jusqu'à Idle .
J'utilise habituellement cette technique pour cela.

Il y a quelques choses différentes à considérer ici: lorsque vous modifiez la priorité d'un processus, cette priorité de base est héritée par tous ses threads, et d'autres processus, il démarre. La priorité actuelle est constituée à partir de la priorité de base et un certain nombre de facteurs qui déterminent si elle doit être renforcée ou non – être au premier plan ne constitue pas forcément une priorité absolue, mais des choses comme sortir d'un état d'attente ou de faire des IO peuvent Donner un petit coup de pouce temporaire.

Je dirais que l'exécution de votre processus Excel avec une priorité élevée lorsque vous travaillez sur ces classeurs très intensifs pourrait avoir un sens, et je dirais qu'un second raccourci appelé «Excel hautement prioritaire» pourrait être un bon moyen de le faire. Créez d'abord un fichier de commandes à une ligne qui exécute la commande de démarrage avec les commutateurs appropriés, par exemple:

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

(Sur une version 64 bits de Windows, ce serait start "high priority excel" /max /high "C:\Program Files (x86)\Microsoft Office\Office12\EXCEL.EXE" moins que vous start "high priority excel" /max /high "C:\Program Files (x86)\Microsoft Office\Office12\EXCEL.EXE" également une version 64 bits de Office, qui n'est disponible que pour 2010, start "high priority excel" /max /high "C:\Program Files\Microsoft Office\Office14\EXCEL.EXE" ) Notez que le titre de la fenêtre peut être tout ce que vous voulez, mais N'est pas facultatif.

Maintenant, enregistrez-le, par exemple, HiperExcel.cmd quelque part pratique – peut-être le dossier du bureau, ou ac: \ scripts ou quelque chose ou votre dossier personnel afin que cela puisse circuler comme une machine à machine. Créez un nouveau raccourci qui pointe vers ce fichier, créez le dossier de départ dans le dossier où le fichier est conservé. Choisissez une icône pour le fichier – parcourez l'exécutable Excel.exe puis choisissez autre chose que l'icône Excel habituelle pour plus de clarté.

Cliquez sur votre nouveau raccourci et il invoquera l'exécution d'Excel en tant que processus de priorité élevée, avec une priorité de base de 13 et, lors de son exécution, elle obtiendra probablement la priorité maximale pour les processus non en temps réel de 15. Même si quelque chose d'autre augmente, Il ne devrait pas être plus prioritaire. Notez que le processus de premier plan n'AVEIT PAS une impulsion de priorité pour être au premier plan (pas depuis NT4.0). Alors, quoi de neuf?

Re-cap ce que nous savons à ce jour: les processus se transforment en priorité, mais pas pour l'exclusion absolue des processus de priorité inférieure (bien, les threads vraiment, mais laissons les choses au processus pour faciliter la discussion). Que se passe-t-il lorsqu'un processus obtient son "tour"? Il arrive à courir pour une unité de temps appelée quantum. Combien de temps existe un quantum? Ça dépend…

C'est là que le processus de premier plan permet d'utiliser plus de ressources – quand il obtient un virage, ce tour peut durer trois fois plus longtemps que les virages des processus de fond. Donc, cela pourrait ne pas aller très souvent (selon la priorité), mais quand il le fait, il le portera plus longtemps.

Vous pouvez choisir d'utiliser des quantiques courts ou longs (la valeur par défaut est courte sur le système d'exploitation de la station de travail, longtemps sur les serveurs) et pour que le processus de premier plan soit augmenté ou non (variable pour w / s, corrigé pour les serveurs par défaut) et, s'il est stimulé, par Combien (efficacement jusqu'à 3 fois). Maintenant, la partie délicate de ceci est que si vous choisissez de changer le multiplicateur, vous vous retrouvez avec tout ce qui a des valeurs très courtes pour le quantum, alors que si vous désactivez le renforcement du premier plan, tout obtient un montant plus long mais égal. Si vous le désactivez bien sûr, les services Windows arrière-plan obtiennent le même quantum que vos applications utilisateur, ce qui pourrait ne pas être idéal. Vous devez définir la valeur dans le registre à l'adresse: HKLM \ System \ CurrentControlSet \ Control \ PriorityControl \ Win32PrioritySeparation, à l'aide d'un masque de bits. Pour rendre les choses plus faciles, les valeurs les plus probables que vous souhaiteriez sont:

2 = valeur par défaut, signifie utiliser les valeurs par défaut avec un boost maximum. Les valeurs par défaut sur le poste de travail O / S sont courtes et variables. 8 = quantique fixe et court (avant-plan et arrière-plan sont égaux) 40 (décimal, x28 hex) = fixe et long (c'est le même que les valeurs par défaut du serveur) 36 (décimal, x24 hex) = impulsion courte, variable mais minimale pour le processus de premier plan . Je pense que c'est celui qui vous donnera probablement le meilleur avantage de réduire le montant auquel d'autres applications sont en compétition, mais permettent à Excel d'obtenir plus de ressource lorsqu'elle est au premier plan (aussi longtemps que vous en augmentez la priorité).

Essayez-le et voyez, j'espère que cela vous aidera – votre kilométrage peut varier bien sur.

En plus: Beaucoup d'autres applications ou processus n'ont pas la CPU en tant que goulot d'étranglement: vos exemples de synchronisation Outlook et de navigation IE ont probablement le réseau, et peut-être pour Outlook certains IO de disque comme des facteurs plus importants de leur vitesse, de sorte qu'ils reçoivent un L'amélioration de l'avant plan ou non, l'impact sur les performances visibles est probablement inférieur à ce que vous pouvez voir par observation simple.

Il n'y a aucun problème avec l'augmentation de la priorité d'un processus pour "au-dessus de la normale" ou "haute", ne le configurez pas uniquement en "temps réel". Impossible de vous aider avec Excel spécifiquement désolé.

Il est possible que la manipulation de priorité soit effectuée non pas par Excel, mais par Windows elle-même. Windows a un mécanisme où la priorité des processus avec Windows au premier plan est renforcée; Ainsi, lorsque Excel perd son focus, sa priorité revient à la normale (ce qui est légèrement inférieur).

La seule page sur MSDN que je pourrais trouver à ce sujet avec une recherche rapide est Priority Boosts :

Lorsqu'un processus qui utilise NORMAL_PRIORITY_CLASS est porté au premier plan, le planificateur augmente la classe de priorité du processus associé à la fenêtre de premier plan, de sorte qu'il soit supérieur ou égal à la classe de priorité de tout processus d'arrière-plan. La classe de priorité revient à son paramètre d'origine lorsque le processus n'est plus au premier plan.

D'après ce que j'ai entendu, il existe des moyens de désactiver cette impulsion prioritaire.

Essayez cela, cela a fonctionné pour moi.

Pas très agréable, mais il a simplement doublé ma vitesse de calcul! Incroyable! (Mais je vérifierai les résultats, pas sûrs d'eux …)

Votre formulaire d'utilisateur doit être au centre de l'écran en 1024 * 768. Il suffit d'envoyer par logiciel un clic droit sur le formulaire d'utilisateur.

Calcul complet, mais n'utilisez pas votre ordinateur pendant qu'il calcule (lancez d'autres programmes, Windows …).

Essayez simplement de me dire comment cela a fonctionné pour vous!

 '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` 

Après une longue nuit de calcul à pleine vitesse, et après vérification, les résultats de ce matin étaient … totalement faux.

Je pense donc que c'est juste un bug, les calculs ne sont pas correctement effectués.

En cliquant sur le formulaire d'utilisateur dans le calcul, il suffit d'accélérer la vitesse du processus, mais pas de recalculer complètement la feuille au-delà. J'ai précisé que j'étais en temps réel avec prio.

Une autre chose intéressante est de modifier la tâche de processus avec prio_x64_199_2367.exe, http://softziz.com/2010/11/prio-64-bit-1-9-9/

Cela sauvegarde la priorité de votre processus définie avec CTRL ALT DEL, à l'intérieur du gestionnaire de tâches, pour les utilisations futures.

Sincères amitiés,

John