web-dev-qa-db-fra.com

Comment maintenez-vous Microsoft Excel fonctionnant à pleine vitesse même quand il n'a pas la fenêtre de la fenêtre?

J'ai remarqué que lorsque Excel 2007 (et probablement versions antérieures) dispose de la mise au point de la fenêtre, Excel fonctionne à pleine vitesse, ce qui signifie que des fichiers ouvrent rapidement des macros VBA rapidement et à long terme.

Si la fenêtre Excel perd la mise au point, la priorité de thread d'Excel semble diminuer de manière spectaculaire et de gros fichiers qui s'ouvraient lorsque vous avez déplacé la mise au point ouverte progressivement et les macros VBA complexes prennent un LONG TIME à terminer .

Y a-t-il un moyen de garder la priorité Excel haut, que cela soit concentré ou non ?

Je sais que je pourrais stimuler la priorité du fil artificiellement à travers le responsable des tâches, mais je ne suis pas sûr de ce que cela pourrait avoir des effets assocaires pour mes feuilles de calcul ou des OS.

Mon système est un noyau double rapide avec 4GB RAM et exécute Vista 64.

Modifier pour clarification:

Mon problème ne consiste pas simplement à soulever la priorité du processus Excel via le gestionnaire de tâches car ceci seulement affecte Excel lors de 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.

Depuis l'utilisation de Excel, il apparaît que, par conception, il réduit délibérément sa propre priorité du processus lorsque la fenêtre Excel n'a pas de concentration.

La définition d'une priorité plus élevée pour le processus Excel ne cesse pas de se produire - elle ne donne qu'excel une priorité de processus plus élevée lorsqu'elle a le focus, mais elle plonge toujours de manière spectaculaire lorsqu'il perd la mise au point.

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

Idéalement, j'en ai besoin pour conserver la même priorité de fil, que la fenêtre Excel soit concentrée.

Jusqu'à présent, je viens de rester assis de l'ordinateur pendant quelques minutes pendant le traitement de sorte que je ne cliquais pas accidentellement sur la fenêtre Excel quand il est très répandu, mais j'espérais juste qu'il y avait une meilleure solution ... peut-être Un bidouillage de registre d'une sorte?

Edit:

Je n'ai jamais trouvé une autre mention de cette question sur le net à - ce lien

Ceci est la citation pertinente ...

Toutefois, si je fournis la fenêtre Excel 2000 visible à l'utilisateur et conserver également la fenêtre de la fenêtre, les macros exécutées avec leur vitesse attendue. Encore une fois, la fenêtre doit avoir la mise au point ou la macro ralentit à nouveau.

10
Joe Schmoe

Les éditions Windows non-Server, par défaut, fournissent un Boost prioritaire au processus de premier plan. Lorsque vous appuyez sur Excel à l'arrière-plan, il perd son coup de pouce au premier plan. Certains autres programmes gagnent plutôt le renforcement des priorités.

Vous pouvez modifier un paramètre afin que les programmes ne reçoivent plus ce boost. Remarque: cela n'affectera pas uniquement Excel, mais tout programme qui aurait autrement qualifié pour un boost.

Voici comment modifier le réglage de Windows XP:

  1. Cliquez avec le bouton droit sur Mon ordinateur.
  2. Choisissez Propriétés.
  3. Cliquez sur Avancé onglet.
  4. Dans le fichier Performance Panneau, cliquez sur le bouton Paramètres Bouton.
  5. Cliquez sur Avancé onglet. Le premier panneau est planification du processeur:

    Processor Scheduling panel

  6. Changez-le de la valeur par défaut des "programmes" à "Services de base" et il faut que Excel se comporte plus près de la façon dont vous voulez quand c'est en arrière-plan.

6
Chris W. Rea

Il y a quelques choses différentes à considérer ici: lorsque vous modifiez la priorité d'un processus, la priorité de base est héritée de tous les threads, et d'autres processus commencent. La priorité actuelle est composée de la priorité de base et d'un certain nombre de facteurs qui déterminent si cela devrait être stimulé ou non - étant au premier plan ne stimule pas elle-même nécessairement la priorité, mais des choses comme sortir d'un état d'attente ou de faire certains IO peut donner un coup de pouce temporaire.

Je suggérerais d'exécuter votre processus Excel avec une priorité élevée lorsque vous travaillez sur ces classeurs très intensifs pourraient avoir du sens et je dirais un deuxième raccourci appelé "Excel haute priorité" pourrait être un bon moyen de le faire. Premièrement, faites un fichier de commandes d'une ligne qui exécute la commande de démarrage avec des 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" Sauf si vous utilisez également une version 64 bits de bureau, qui est disponible uniquement pour 2010 start "high priority Excel" /max /high "C:\Program Files\Microsoft Office\Office14\Excel.EXE") Notez que le titre du titre de La fenêtre peut être tout ce que vous aimez, mais n'est pas facultatif.

Maintenant, enregistrez-la comme par exemple hiperexcel.cmd quelque part à portée de main - peut-être le dossier Office, ou un dossier C:\scripts ou un somesuch, ou votre dossier à domicile afin que cela puisse errer une machine à former la machine. Créez un nouveau raccourci qui pointe vers ce fichier, faites le dossier Démarrer 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 Excel fonctionnant comme un processus de priorité élevée, avec une priorité de base de 13 et lorsqu'il est en cours d'exécution, il obtiendra probablement la priorité maximale des processus en temps non réel de 15. Même si quelque chose d'autre obtient un coup de pouce, Il ne devrait pas obtenir une priorité plus élevée. Notez que le processus de premier plan ne reçoit pas un coup de pouce de priorité juste pour être au premier plan (pas depuis NT4.0). Alors, quoi de neuf?

Re-CAP, ce que nous savons jusqu'à présent: les processus deviennent à tour de rôle en fonction de la priorité, mais pas à l'exclusion absolue des processus de priorité inférieure (bien, les threads, mais permettent de garder les choses à traiter pour la facilité de discussion). Que se passe-t-il quand un processus obtient son "tour"? Il faut courir pour une unité de temps appelée une quantum. Combien de temps dure une quantum? Ça dépend...

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

Vous pouvez choisir d'utiliser des quantums courts ou longs (par défaut est court sur le système d'exploitation de poste de travail, long sur des serveurs) et pour que le processus de premier plan soit boosté ou non (variable pour W/S, fixe pour les serveurs par défaut), et si elle est renforcée par combien (efficacement jusqu'à 3 fois). Maintenant, la partie Tricksy de ceci est que si vous choisissez de changer le multiplicateur, vous vous retrouvez avec toutes les valeurs très courtes pour Quantum, alors que si vous désactivez le premier plan de premier plan, tout devient une quantité plus longue mais égale. Si vous le désactivez bien sûr, les services Windows Background Windows 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 suivante: HKLM\System\CurrentControlset\Control\PriorityControl\Win32PrioritySeparation, à l'aide d'un masque de bits. Pour faciliter les choses, les valeurs les plus probables que vous voudriez sont:

2 = valeur par défaut, signifie utiliser les valeurs par défaut avec un maximum de boost. Les valeurs par défaut sur Workstation O/S sont courtes et variables. 8 = fixe, courte quantique (premier plan et arrière-plan est égal) 40 (décimal, x28 hex) = fixe et long (ceci est identique à la valeur par défaut du serveur) 36 (décimal, x24 hexagonal) = short, variable mais minimal boosting pour le processus de premier plan . Je pense que ceci est celui qui vous donnera probablement le plus d'avantages pour réduire le montant que d'autres applications sont concurrentielles, mais permettent à Excel d'obtenir plus de ressources lorsque vous au premier plan (tant que vous soulevez également sa priorité).

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

De côté: beaucoup d'autres applications ou processus ne disposent pas de la CPU comme bouteille d'étranglement - Vos exemples de la synchronisation Outlook et IE _ La navigation a probablement du réseau, et éventuellement pour Outlook Certains Disk IO comme Des facteurs plus importants dans leur vitesse, de sorte qu'ils obtiennent une augmentation de premier plan ou non, l'impact de la performance visible est probablement inférieur à ce que vous pouvez voir par simple observation.

3
AdamV

Il n'y a aucun problème à accroître la priorité d'un processus de "au-dessus de la normale" ou "élevée", ne le définissez tout simplement pas sur "temps réel". Je ne peux pas vous aider avec Excel spécialement désolé.

1
LachlanG

Il est possible que la manipulation prioritaire soit faite non par Excel, mais par Windows elle-même. Windows a un mécanisme où la priorité des processus avec Windows dans le premier plan est boosté; Donc, lorsque Excel perd la mise au point, sa priorité remonte à la normale (qui est légèrement inférieure).

La seule page sur MSDN, je pouvais en trouver à ce sujet avec une recherche rapide est Boosts prioritaires :

Lorsqu'un processus qui utilise NORMAL_PRIORITY_CLASS est amené au premier plan, le planificateur augmente la classe prioritaire du processus associé à la fenêtre de premier plan, de sorte qu'elle soit supérieure ou égale à la classe de priorité des processus de référence. La classe de priorité retourne à 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 priorité.

1
CesarB

Essayez juste cela, ça a fonctionné pour moi.

Pas très agréable chemin, mais cela a effectivement doublé ma vitesse de calcul! Incroyable! (Mais je vais vérifier les résultats, pas sûr d'eux ...)

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

Calcul complet, mais n'utilisez pas votre ordinateur pendant que cela 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`
0
John

Après une longue nuit de calcul à pleine vitesse et après chèque, les résultats de ce matin étaient ... Totalement faux.

Donc, je pense que c'est juste un bogue, les calculs ne sont pas correctement effectués.

En cliquant sur le formal utilisateur dans le calcul, il suffit d'accélérer la vitesse de processus, mais ne recalculer pas complètement la feuille au-delà. Je précise que j'étais en temps réel avec Prio.

Une autre chose belle est de modifier la tâche de processus avec prio_x64_199_2367.exe, http://softziz.com/2010/11/Prio-64-BIT-9-9-9/

Ceci enregistre votre priorité de processus définie avec Ctrl Alt Del, responsable des tâches à l'intérieur des utilisations futures.

Sincères amitiés,

John

0
John