Wie können Sie Microsoft Excel mit voller Geschwindigkeit laufen lassen, auch wenn der Fensterfokus nicht angezeigt wird?

32623
Joe Schmoe

Ich habe festgestellt, dass, wenn Excel 2007 (und wahrscheinlich frühere Versionen) den Fokus des Fensters hat, Excel mit voller Geschwindigkeit ausgeführt wird. Dies bedeutet, dass Dateien schnell geöffnet werden und lange laufende VBA-Makros schnell ausgeführt werden.

Wenn das Excel-Fenster den Fokus verliert, scheint die Thread-Priorität von Excel dramatisch zu sinken und große Dateien, die geöffnet wurden, als Sie den Fokus träge geöffnet haben, und die Ausführung komplexer VBA-Makros dauert lange .

Gibt es eine Möglichkeit, die Excel-Priorität hoch zu halten, unabhängig davon, ob sie fokussiert ist oder nicht?

Ich weiß, dass ich die Threadpriorität künstlich durch den Task-Manager erhöhen konnte, aber ich bin mir nicht sicher, welche Auswirkungen dies für meine Tabellenkalkulationen oder mein Betriebssystem haben kann.

Mein System ist ein schneller Dual Core mit 4 GB RAM und läuft unter Vista 64.

BEARBEITUNG ZUR KLARIFIZIERUNG:

Mein Problem besteht nicht einfach darin, die Priorität des Excel-Prozesses über den Task-Manager zu erhöhen, da dies nur Excel betrifft, wenn der Fensterfokus aktiviert ist.

Der Punkt ist, was passiert, wenn Excel den Fensterfokus verliert.

Von Verwendung extensiv Excel scheint es, dass, durch Design, es seine eigenen Prozess Priorität bewusst senkt, wenn die Excel - Fenster Fokus nicht haben.

Durch das Festlegen einer höheren Priorität für den Excel-Prozess wird dies nicht verhindert - es gibt Excel nur eine höhere Prozesspriorität, wenn es den Fokus hat, aber es fällt immer noch drastisch ab, wenn es den Fokus verliert.

Bei normaler Verwendung von Excel (wahrscheinlich 99% aller Benutzer) würden Sie diesen Effekt nicht bemerken, aber bei einer massiven Kalkulationstabelle (ungefähr 2000 Arbeitsblätter, glaube ich) und komplexen VBA-Makros, deren Ausführung einige Minuten in Anspruch nimmt, ist der Effekt sehr hoch bemerkbar.

Idealerweise brauche ich die gleiche Thread-Priorität, unabhängig davon, ob das Excel-Fenster fokussiert ist.

Bis jetzt habe ich mich während der Bearbeitung nur ein paar Minuten vom Computer zurücklehnen, so dass ich nicht versehentlich das Excel-Fenster ausklicke, wenn es knirscht, aber ich hatte nur gehofft, dass es eine bessere Lösung gibt ... vielleicht eine Art Registry-Hack?

BEARBEITEN:

Ich habe immer nur eine andere Erwähnung dieses Problems im Internet unter diesem Link gefunden

Dies ist das relevante Zitat ...

Wenn ich jedoch das Excel 2000-Fenster für den Benutzer sichtbar mache und auch das Fenster im Fokus halte, werden die Makros mit ihrer erwarteten Geschwindigkeit ausgeführt. Auch hier muss das Fenster den Fokus haben oder das Makro verlangsamt sich erneut zu einer Durchforstung.

9
Gute Frage. Dies hat sich auch als irritierend für mich erwiesen und noch immer keine echte Lösung ... Noldorin vor 13 Jahren 51
Die Threadpriorität selbst hat keine Auswirkungen auf die Leistung, es sei denn, es gibt mehrere Threads, die um eine Ressource konkurrieren. In diesem Fall erhält die höhere Priorität den ersten Teil des Kreises. Ich habe Excel seit langem nicht mehr verwendet, aber im Hintergrund kann es sein, dass es sich selbst drosselt, oder Sie werden den etwas zurückgebliebenen Windows-Tauschmechaniken zum Opfer fallen. Mark K Cowan vor 9 Jahren 51
Dies ist bei allen Office 2007-Programmen der Fall, wenn lange VBA-Skripts ausgeführt werden. Ich schrieb einmal ein Skript, das Excel-Daten entnahm und in Word-Formulare einfügte. Wenn ich das Word-Programm versteckte, verfiel die Erklärung. Wenn ich das Programm erlaubte, war das Skript ~ 10x schneller. wbeard52 vor 8 Jahren 51

7 Antworten auf die Frage

6
Chris W. Rea

Windows-Nicht-Server-Editionen bieten standardmäßig einen Prioritätsschub für den Vordergrundprozess. Wenn Sie Excel in den Hintergrund schieben, verliert es den Schub, den es zuvor im Vordergrund hatte. Stattdessen erhält ein anderes Programm den Prioritätsschub.

Sie können eine Einstellung ändern, sodass Programme diesen Schub nicht mehr erhalten. Hinweis: Dies betrifft nicht nur Excel, sondern jedes Programm, das sich sonst für einen Schub qualifiziert hätte.

So passen Sie die Einstellung in Windows XP an:

  1. Klicken Sie mit der rechten Maustaste auf Arbeitsplatz .
  2. Wählen Sie Eigenschaften .
  3. Klicken Sie auf die Registerkarte Erweitert .
  4. Im Performance - Panel, klicken Sie auf die Einstellungen - Taste.
  5. Klicken Sie auf die Registerkarte Erweitert . Das erste Panel ist die Prozessorplanung :

    Processor Scheduling panel

  6. Ändern Sie den Standardwert von "Programme" in "Hintergrunddienste". Dies sollte dazu führen, dass sich Excel im Hintergrund der gewünschten Art und Weise verhält.

Beachten Sie, dass Vordergrundprogramme dadurch oft als träge erscheinen, wenn Hintergrundanwendungen und -dienste plötzlich entscheiden, dass sie etwas tun möchten. Mark K Cowan vor 9 Jahren 51
_ "Windows-Nicht-Server-Editionen bieten standardmäßig einen Prioritätsschub für den Vordergrundprozess." _ Nein, das ist nicht der Fall. (Sie haben es vor Windows NT 4 getan, aber das ist schon lange her.) Was sie tun, ist, die Zeitscheiben für den Vordergrundprozess dreimal so lange zu machen wie die Zeitscheiben für andere Prozesse (90 ms vs. 30). Es gibt auch eine +2 Prioritätserhöhung, die auf jeden Thread in einem Vordergrundprozess angewendet wird, wenn eine Wartezeit aufgelöst wird. Das Problem mit der hier angebotenen Lösung ist, dass die Zeitscheibe mit 180 ms noch länger dauert. Dies kann die Reaktionsfähigkeit von UI-intensiven Apps erheblich beeinträchtigen. Jamie Hanrahan vor 6 Jahren 51
4
nik

Ich glaube nicht, dass es in Ihrem Fall ein Problem gibt, wenn Sie die Priorität des Excel-Prozesses in " Über Normal" ändern . Es sollte kein Problem sein.

Machen Sie es nicht am höchsten, wo es mit Systemprozessen konkurrieren kann.
Nicht aussetzen es, oder Sie können andere Dinge auf sie ausgesetzt haben!


Wenn Sie den Process Explorer von Mark Russinovich verwenden, können Sie die Prioritäten der auf Ihrem System ausgeführten Prozesse überprüfen. Es zeigt die folgenden Prioritätswerte und ihre Zuordnung.

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 

Sie können den Prozess-Explorer verwenden und versuchen, einige Prioritäten für Excel erneut festzulegen .
Bewegen Sie es über 8, aber gehen Sie nicht über 12
Höher als normal bei 10 tun sollten, erwarte ich.

Wenn Sie der Meinung sind, dass ein Prozess zu viel Prozessorzeit in Anspruch nimmt, während er nicht im Fokus ist, können Sie die Priorität bis auf Leerlauf senken .
Normalerweise verwende ich diese Technik dafür.

Aber die Priorität wird immer noch sinken, wenn Excel nicht den Fokus hat, oder? ... nur auf eine etwas höhere Prioritätsstufe als zuvor, schätze ich. Wissen Sie, wie Sie die Thread-Priorität unabhängig vom Fensterfokus konsistent halten? Joe Schmoe vor 14 Jahren 51
Ich bin auf der Suche nach diesem Detail, aber ich verstehe, dass das Fenster im Fokus normalerweise die Priorität "Normal" hat (standardmäßig). Sobald Sie "Excel" in die Priorität "Über Normal" verschoben haben, sollte es mit einer höhere Priorität als das fokussierte Fenster. Aber mit niedrigerer Priorität als das System verarbeitet - dort wollen Sie es haben. nik vor 14 Jahren 51
Wenn ich nicht missverstehe, was Sie sagen, haben Sie die Implikation, dass Sie die Priorität des Excel-Prozesses erhöhen können, und dieser Wert bleibt immer bei dieser Priorität. Aber wenn ich Excel ausführlich nutze, kann ich mit einiger Sicherheit sagen, dass es das nicht tut. VON DESIGN scheint es, dass es seine eigene Priorität senkt, wenn das Excel-Fenster nicht den Fokus hat. Durch das Festlegen einer höheren Priorität für den Excel-Prozess wird dies nicht verhindert - es gibt Excel nur eine höhere Prozesspriorität, wenn es den Fokus hat, aber es fällt immer noch drastisch ab, wenn es den Fokus verliert. Führen Sie einfach einen Test aus, um dies zu bestätigen. Joe Schmoe vor 14 Jahren 51
Ich bin überrascht. Allerdings habe ich diese Technik nicht verwendet, um Prozessprioritäten zu erhöhen (nur um sie zu senken). nik vor 14 Jahren 51
Ich habe der Frage einige weitere Informationen hinzugefügt, um diese absichtliche Prozesssenkung hervorzuheben, die scheinbar im Gange ist. Im Idealfall würde es eine Art Registry-Hack geben, der das verhindern würde. Joe Schmoe vor 14 Jahren 51
Ich habe gerade versucht, die Priorität einer Cygwin-Shell auf 10 zu erhöhen und eine (echte) Schleife darin abzufeuern. Die Priorität wurde eindeutig bei 10 beibehalten, wie in procexp.exe dargestellt. Wie haben Sie dies überprüft? nik vor 14 Jahren 51
Ich habe es mit der großen Tabelle getestet, auf die sich das Problem bezieht. Ich starte ein lang laufendes Makro und es läuft gut mit ein paar Minuten. Wenn ich es starte und dann während der Ausführung auf mein Browserfenster klicke, ohne etwas zu tun, zieht sich die Makroausführung immer weiter. Ein Klick auf das Excel-Fenster beschleunigt plötzlich wieder alles. Ich habe der ursprünglichen Frage einen Link hinzugefügt, bei dem ein anderer Benutzer diesen Effekt mit Excel 2000 hatte Joe Schmoe vor 14 Jahren 51
Das ist traurig. Ich frage mich, ob dies mit etwas anderem als dieser Priorität zu tun hat. Die einzige andere Option, die ich sehen kann, ist das Einstellen der Leistungskonfiguration auf Ihrem Computer für Hintergrundaktivitäten. Das funktioniert möglicherweise auch nicht, und wenn dies der Fall ist, wird dies wahrscheinlich das gesamte GUI-System verlangsamen. Ich bin fuchsig :-( nik vor 14 Jahren 51
2
AdamV

Hier gibt es verschiedene Dinge zu beachten: Wenn Sie die Priorität eines Prozesses ändern, wird diese Basispriorität von allen ihren Threads und anderen Prozessen geerbt. Die derzeitige Priorität setzt sich aus der Basispriorität zusammen und eine Reihe von Faktoren, die bestimmen, ob sie angehoben werden soll oder nicht - im Vordergrund zu stehen, erhöht nicht zwangsläufig die Priorität, aber Dinge wie das Verlassen eines Wartezustands oder das Ausführen von E / A können dies einen kurzen vorübergehenden Schub geben.

Ich würde vorschlagen, dass die Ausführung Ihres Excel-Prozesses mit hoher Priorität bei der Arbeit an diesen sehr intensiven Arbeitsmappen sinnvoll ist, und ich würde sagen, eine zweite Abkürzung namens "Excel mit hoher Priorität" ist eine gute Möglichkeit, dies zu tun. Erstellen Sie zunächst eine einzeilige Batchdatei, die den Startbefehl mit den entsprechenden Schaltern ausführt, z.

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

(Bei einer 64-Bit-Version von Windows wäre dies der Fall, start "high priority excel" /max /high "C:\Program Files (x86)\Microsoft Office\Office12\EXCEL.EXE"sofern Sie nicht auch eine 64-Bit-Version von Office ausführen, die nur für 2010 und später verfügbar ist. start "high priority excel" /max /high "C:\Program Files\Microsoft Office\Office14\EXCEL.EXE") Beachten Sie, dass der Titel des Fensters beliebig sein kann, jedoch nicht optional ist.

Speichern Sie diese Datei beispielsweise als HiperExcel.cmd an einem geeigneten Ort - vielleicht im Büroordner oder im Ordner ac: \ scripts oder in einem anderen Ordner oder in Ihrem Basisordner, damit dieser von Maschine zu Maschine wechseln kann. Erstellen Sie eine neue Verknüpfung, die auf diese Datei verweist, und legen Sie den Startordner als Ordner fest, in dem sich die Datei befindet. Wählen Sie ein Symbol für die Datei - navigieren Sie zur ausführbaren Datei "Excel.exe" und wählen Sie aus Gründen der Übersichtlichkeit ein anderes als das übliche Excel-Symbol .

Wenn Sie auf Ihre neue Verknüpfung klicken, wird Excel als hochpriorer Prozess mit einer Basispriorität von 13 ausgeführt. Wenn er ausgeführt wird, erhält er wahrscheinlich die höchste Priorität für Nicht-Echtzeitprozesse von 15. Auch wenn etwas anderes einen Schub erhält, es sollte keine höhere Priorität bekommen. Beachten Sie, dass der Vordergrundprozess KEINE Priorität erhält, nur weil er im Vordergrund ist (nicht seit NT4.0). Also, was ist los?

Das, was wir bisher wissen, erneut abdecken: Prozesse wechseln sich nach Priorität ab, jedoch nicht unter dem absoluten Ausschluss von Prozessen mit niedriger Priorität (naja, wirklich Threads, aber lassen die Dinge für Prozesse, um die Diskussion zu erleichtern). Was passiert, wenn ein Prozess an der Reihe ist? Es läuft für eine Zeiteinheit, die Quanten genannt wird. Wie lang ist ein Quantum? Es hängt davon ab, ob...

Hier kann der Vordergrundprozess mehr Ressourcen beanspruchen. Wenn er an der Reihe ist, kann diese Drehung dreimal länger dauern als die Umdrehungen der Hintergrundprozesse. Es kommt also nicht oft vor (je nach Priorität), aber wenn es der Fall ist, dauert es länger.

Sie können zwischen kurzen oder langen Quanten wählen (standardmäßig ist das Betriebssystem der Workstation lang, auf den Servern lang), und der Vordergrundprozess muss angehoben werden oder nicht (variabel für w / s, standardmäßig für Server festgelegt) und bei Bedarf durch wie viel (effektiv bis zu 3 mal). Das Trügerische dabei ist, dass bei einer Änderung des Multiplikators am Ende alles sehr kurze Werte für das Quantum hat. Wenn Sie jedoch die Vordergrundanhebung deaktivieren, wird alles länger, aber gleich viel. Wenn Sie es natürlich deaktivieren, erhalten Hintergrund-Windows-Dienste dasselbe Quantum wie Ihre Benutzeranwendungen, was möglicherweise nicht ideal ist. Sie müssen den Wert in der Registrierung unter HKLM \ System \ CurrentControlSet \ Control \ PriorityControl \ Win32PrioritySeparation mithilfe einer Bitmaske festlegen. Zur Vereinfachung sind folgende Werte am wahrscheinlichsten:

2 = Standardwert, bedeutet Standardeinstellungen mit maximaler Erhöhung. Die Standardeinstellungen auf dem Workstation-Betriebssystem sind kurz und variabel. 8 = fest, kurzes Quantum (Vordergrund und Hintergrund sind gleich) 40 (dezimal, x28 hex) = fest und lang (entspricht Servervorgaben) 36 (dezimal, x24 hex) = kurz, variabel, aber minimaler Anstieg für den Vordergrundprozess . Ich denke, dies ist derjenige, der Ihnen wahrscheinlich den größten Nutzen verschaffen wird, um den Umfang zu verringern, in dem andere Apps konkurrieren, aber es Excel ermöglicht, mehr Ressourcen zu erhalten, wenn Sie sich im Vordergrund befinden (sofern Sie auch die Priorität erhöhen).

Versuchen Sie es und sehen Sie, ich hoffe, das hilft - Ihre Laufleistung kann natürlich variieren.

Nebenbei: Viele andere Anwendungen oder Prozesse haben nicht die CPU als Engpass - Ihre Beispiele für Outlook-Synchronisierung und IE-Browsing haben wahrscheinlich das Netzwerk und möglicherweise einige Festplatten-E / A als wichtigere Faktoren für ihre Geschwindigkeit Vordergrund im Vordergrund oder nicht, der Einfluss auf die sichtbare Leistung liegt wahrscheinlich unter dem, was Sie durch einfache Beobachtung sehen können.

BasicallyMoney.com zeigt, wie die Einstellung für die Quantenregeln über die XP-GUI geändert werden kann. Der Registrierungsschlüssel-Fix ist jedoch für Betriebssysteme von NT4 bis Windows 7 immer noch derselbe, also allgemeiner. Die Einstellung "Hintergrunddienste" entspricht der Einstellung "Fest". Beachten Sie, dass dies kein Prioritätsschub ist, sondern die Länge der 'Timeslice', die jeder Prozess erhält. Priorität ist eine unabhängige Eigenschaft, die nicht dadurch erhöht wird, dass sie im Vordergrund steht. AdamV vor 14 Jahren 52
1
LachlanG

Es gibt kein Problem, die Priorität eines Prozesses auf "über Normal" oder "Hoch" zu erhöhen. Setzen Sie ihn nicht auf "Echtzeit". Kann Ihnen mit Excel nicht besonders helfen, tut mir leid.

1
CesarB

Es ist möglich, dass die Prioritätsbearbeitung nicht von Excel, sondern von Windows selbst vorgenommen wird. Windows hat einen Mechanismus, durch den die Priorität von Prozessen mit Fenstern im Vordergrund erhöht wird. Wenn Excel den Fokus verliert, ist seine Priorität wieder normal (was etwas niedriger ist).

Die einzige Seite auf MSDN, die ich dazu mit einer schnellen Suche finden konnte, ist Priority Boosts :

Wenn ein Prozess, der verwendet NORMAL_PRIORITY_CLASSwird, in den Vordergrund gebracht wird, erhöht der Scheduler die Prioritätsklasse des Prozesses, der dem Vordergrundfenster zugeordnet ist, sodass er größer oder gleich der Prioritätsklasse aller Hintergrundprozesse ist. Die Prioritätsklasse kehrt zu ihrer ursprünglichen Einstellung zurück, wenn der Prozess nicht mehr im Vordergrund steht.

Nach dem, was ich gehört habe, gibt es Möglichkeiten, diese Prioritätssteigerung zu deaktivieren.

Ich bin mir darüber nicht sicher. In diesem Fall würde ich erwarten, dass sich andere Anwendungen merklich verlangsamen, wenn sie nicht fokussiert sind. Ich bemerke keine Verlangsamung in Outlook, wenn beispielsweise E-Mails synchronisiert werden, wenn der Fokus im Webbrowser liegt, oder sogar eine Verlangsamung in meinem Browser, wenn eine Seite geladen wird, wenn ich mich auf das Excel-Fenster konzentriere. Joe Schmoe vor 14 Jahren 51
Anzahl Crunchers wie BOINC-Tasks werden im Hintergrund mit niedriger Priorität ausgeführt, nutzen jedoch die verfügbare Reserve-CPU-Kapazität voll aus. Alistair Knock vor 14 Jahren 52
Diese MSDN-Seite beschreibt altes, sogar uraltes Verhalten. Jamie Hanrahan vor 6 Jahren 51
0
John

Versuchen Sie es einfach, es hat bei mir funktioniert.

Nicht sehr schön, aber es hat tatsächlich meine Berechnungsgeschwindigkeit verdoppelt! Tolle! (aber ich werde die Ergebnisse überprüfen, bin mir nicht sicher ...)

Ihr Benutzerformular muss sich in der Mitte des Bildschirms in 1024 * 768 befinden. Senden Sie einfach per Software einen Rechtsklick auf das Benutzerformular.

Vollständige Berechnung, aber verwenden Sie Ihren Computer nicht während der Berechnung (andere Programme starten, Windows).

Versuche es mir einfach zu sagen, wie es für dich funktioniert hat!

'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

Nach einer langen Nacht voller Geschwindigkeitsberechnung und nach der Überprüfung waren die Ergebnisse heute morgen völlig falsch.

Ich denke es ist nur ein Fehler, die Berechnungen werden nicht richtig ausgeführt.

Durch Klicken auf das Benutzerformular in der Berechnung wird die Prozessgeschwindigkeit beschleunigt, das Blatt jedoch nicht vollständig neu berechnet. Ich war genau in Echtzeit bei prio.

Eine weitere nette Sache ist, die Prozessaufgabe mit prio_x64_199_2367.exe, http://softziz.com/2010/11/prio-64-bit-1-9-9/ zu optimieren.

Speichern Sie Ihre mit CTRL ALT DEL innerhalb des Task-Managers definierte Prozesspriorität für zukünftige Zwecke.

Mit freundlichen Grüßen,

John