Wie kann Microsoft Excel auch ohne Fensterfokus mit voller Geschwindigkeit ausgeführt werden?


10

Ich habe festgestellt, dass Excel mit voller Geschwindigkeit ausgeführt wird, wenn Excel 2007 (und wahrscheinlich frühere Versionen) den Fensterfokus hat. Dies bedeutet, dass Dateien schnell geöffnet werden und lang 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 beim langsamen Öffnen des Fokus geöffnet wurden, und komplexe VBA-Makros benötigen lange Zeit.

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 Thread-Priorität durch den Task-Manager künstlich erhöhen kann, bin mir jedoch nicht sicher, welche Auswirkungen dies auf meine Tabellenkalkulationen oder mein Betriebssystem haben könnte.

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

BEARBEITEN FÜR DIE ERKLÄRUNG:

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

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.

Das Festlegen einer höheren Priorität für den Excel-Prozess verhindert dies nicht. Es gibt Excel nur dann eine höhere Prozesspriorität, wenn es den Fokus hat, aber es sinkt immer noch dramatisch, wenn es den Fokus verliert.

Bei normaler Excel-Verwendung (wahrscheinlich 99% aller Benutzer) würden Sie diesen Effekt nicht bemerken, aber mit einer umfangreichen Tabelle (etwa 2000 Arbeitsblätter, glaube ich) und komplexen VBA-Makros, deren Ausführung einige Minuten dauert, ist der Effekt sehr groß bemerkbar.

Im Idealfall muss die gleiche Thread-Priorität beibehalten werden, unabhängig davon, ob das Excel-Fenster fokussiert ist.

Bis jetzt habe ich mich während der Verarbeitung einige Minuten vom Computer zurückgelehnt, damit ich nicht versehentlich auf das Excel-Fenster klicke, wenn es knirscht, aber ich hatte nur gehofft, dass es eine bessere Lösung gibt ... vielleicht eine Art Registry-Hack?

BEARBEITEN:

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

Dies ist das relevante Zitat ...

Wenn ich jedoch das Excel 2000-Fenster für den Benutzer sichtbar mache und das Fenster auch im Fokus halte, werden die Makros mit der erwarteten Geschwindigkeit ausgeführt. Auch hier muss das Fenster fokussiert sein, oder das Makro wird wieder langsamer.


Gute Frage. Dies hat sich auch als irritierendes "Feature" für mich erwiesen und immer noch keine wirkliche Lösung ...
Noldorin

Die Thread-Priorität an sich hat keine Auswirkung auf die Leistung, es sei denn, mehrere Threads konkurrieren um eine Ressource. In diesem Fall erhält die höhere Priorität das erste Stück des Kuchens. Ich habe Excel schon lange nicht mehr verwendet, aber es kann sich im Hintergrund selbst drosseln, oder Sie werden Opfer der etwas verzögerten Austauschmechanik von Windows.
Mark K Cowan

Dies geschieht bei allen Office 2007-Programmen, wenn lange VBA-Skripts ausgeführt werden. Ich habe einmal ein Skript geschrieben, das Excel-Daten in Word-Formulare einfügt. Wenn ich das Word-Programm versteckte, fiel die Auslösung auf einen Crawl. Wenn ich zuließ, dass das Programm angezeigt wurde, war das Skript ~ 10x schneller.
wbeard52

Antworten:


6

Windows-Nicht-Server-Editionen bieten standardmäßig eine Prioritätssteigerung für den Vordergrundprozess. Wenn Sie Excel in den Hintergrund verschieben, verliert es den Boost, den es zuvor im Vordergrund hatte. Ein anderes Programm erhält stattdessen den Prioritätsschub.

Sie können eine Einstellung so ändern, dass Programme diesen Schub nicht mehr erhalten. Hinweis: Dies betrifft nicht nur Excel, sondern alle Programme, die sich ansonsten für einen Boost qualifiziert hätten.

So optimieren Sie die Einstellung in Windows XP:

  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 Fenster ist Prozessorplanung :

    Prozessor-Planungsfenster

  6. Ändern Sie es von der Standardeinstellung "Programme" in "Hintergrunddienste" und es sollte dazu führen, dass sich Excel im Hintergrund näher an der gewünschten Weise verhält.


Beachten Sie, dass dies dazu führt, dass Vordergrundprogramme oft träge erscheinen, wenn Hintergrundanwendungen und -dienste plötzlich entscheiden, dass sie etwas tun möchten.
Mark K Cowan

"Windows-Nicht-Server-Editionen bieten standardmäßig eine Prioritätssteigerung für den Vordergrundprozess." Nein, das tun sie nicht. (Sie haben es vor Windows NT 4 getan, aber das ist sehr lange her.) Sie machen die Zeitscheibe für den Vordergrundprozess dreimal so lang wie die Zeitscheibe für andere Prozesse (90 ms gegenüber 30). Es gibt auch eine Erhöhung der Priorität um +2, die auf jeden Thread in einem Vordergrundprozess angewendet wird, wenn eine Wartezeit behoben wird. Das Problem mit der hier angebotenen Lösung besteht darin, dass die Zeitscheibe mit 180 ms noch länger wird. Dies kann die Reaktionsfähigkeit von UI-intensiven Apps erheblich beeinträchtigen.
Jamie Hanrahan

4

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

Machen Sie es nicht am höchsten , wo es mit Systemprozessen konkurrieren wird.
Nicht aussetzen es, oder Sie können andere Dinge auf sie aufgehängt!


Wenn Sie den Prozess-Explorer von Mark Russinovich verwenden , um die Prioritäten der auf Ihrem System ausgeführten Prozesse zu ü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, Excel neu zu priorisieren .
Bewegen Sie es über 8 , aber gehen Sie nicht über 12 hinaus.
Über Normal bei 10 sollte es reichen, erwarte ich.

Wenn Sie der Meinung sind, dass ein Prozess zu viel Prozessorzeit in Anspruch nimmt, während er nicht fokussiert ist, können Sie seine Priorität bis zum Leerlauf senken .
Ich benutze normalerweise diese Technik dafür.


Aber die Priorität wird immer noch sinken, wenn Excel nicht den Fokus hat, nicht wahr? ... nur auf eine etwas höhere Prioritätsstufe als zuvor, denke ich. Wissen Sie, wie Sie die Thread-Priorität unabhängig vom Fensterfokus konsistent halten können?
Joe Schmoe

Ich amsuche nach diesem Detail, aber ich verstehe, dass das Fenster im Fokus normalerweise NormalPriorität hat (standardmäßig) und sobald Sie Excelzur Above NormalPriorität wechseln , sollte es mit einer höheren Priorität als das fokussierte Fenster ausgeführt werden. Aber mit niedrigerer Priorität als das System verarbeitet - genau dort, wo Sie es haben möchten.
Nik

Wenn ich nicht falsch verstehe, was Sie sagen, bedeutet dies, dass Sie die Priorität des Excel-Prozesses erhöhen können und diese Priorität die ganze Zeit beibehalten wird. Aber wenn ich Excel ausgiebig benutze, kann ich mit einiger Sicherheit sagen, dass dies nicht der Fall ist. BY DESIGN scheint seine eigene Priorität zu senken, wenn das Excel-Fenster keinen Fokus hat. Das Festlegen einer höheren Priorität für den Excel-Prozess verhindert dies nicht. Es gibt Excel nur dann eine höhere Prozesspriorität, wenn es den Fokus hat, aber es sinkt immer noch dramatisch, wenn es den Fokus verliert. Haben Sie gerade einen Test durchgeführt, um dies zu bestätigen.
Joe Schmoe

Ich bin überrascht. Ich habe diese Technik jedoch nicht verwendet, um Prozessprioritäten anzuheben (nur um sie zu senken).
Nik

Ich habe der Frage einige weitere Informationen hinzugefügt, um diese absichtliche Prozesssenkung hervorzuheben, die anscheinend vor sich geht. Im Idealfall würde es eine Art Registrierungs-Hack geben, der dies verhindern würde.
Joe Schmoe

3

Hier sind verschiedene Dinge zu beachten: Wenn Sie die Priorität eines Prozesses ändern, wird diese Basispriorität von allen Threads und anderen von ihm gestarteten Prozessen geerbt. Die aktuelle Priorität setzt sich aus der Basispriorität und einer Reihe von Faktoren zusammen, die bestimmen, ob sie erhöht werden soll oder nicht - im Vordergrund zu sein, erhöht nicht unbedingt selbst die Priorität, aber Dinge wie das Verlassen eines Wartezustands oder das Ausführen von E / A können dies Geben Sie einen kurzen vorübergehenden Schub.

Ich würde vorschlagen, dass das Ausführen Ihres Excel-Prozesses mit hoher Priorität bei der Arbeit an diesen sehr intensiven Arbeitsmappen sinnvoll ist, und ich würde sagen, dass eine zweite Verknüpfung mit dem Namen "Excel mit hoher Priorität" eine gute Möglichkeit ist, dies zu tun. Erstellen Sie zunächst eine einzeilige Batchdatei, in der der Startbefehl mit den entsprechenden Schaltern ausgeführt wird, z.

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

(Unter einer 64-Bit-Version von Windows ist dies nur möglich, start "high priority excel" /max /high "C:\Program Files (x86)\Microsoft Office\Office12\EXCEL.EXE"wenn Sie auch eine 64-Bit-Version von Office ausführen, die nur ab 2010 verfügbar ist. start "high priority excel" /max /high "C:\Program Files\Microsoft Office\Office14\EXCEL.EXE") Beachten Sie, dass der Titel für das Fenster beliebig sein kann, jedoch nicht optional ist.

Speichern Sie dies jetzt als z. B. HiperExcel.cmd an einem praktischen Ort - möglicherweise im Büroordner oder im Ordner ac: \ scripts oder so ähnlich oder in Ihrem Basisordner, damit dies von Maschine zu Maschine wechseln kann. Erstellen Sie eine neue Verknüpfung, die auf diese Datei verweist, und machen Sie den Startordner zum Ordner, in dem die Datei aufbewahrt wird. 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 etwas anderes als das übliche Excel-Symbol .

Klicken Sie auf Ihre neue Verknüpfung, um Excel aufzurufen, das als Prozess mit hoher Priorität mit einer Basispriorität von 13 ausgeführt wird. Wenn es ausgeführt wird, erhält es wahrscheinlich die maximale Priorität für Nicht-Echtzeit-Prozesse von 15. Selbst wenn etwas anderes einen Schub erhält, es sollte keine höhere Priorität bekommen. Beachten Sie, dass der Vordergrundprozess KEINE Prioritätserhöhung erhält, nur weil er im Vordergrund steht (nicht seit NT4.0). Also, was ist los?

Wiederholen Sie das, was wir bisher wissen: Prozesse wechseln sich nach Priorität ab, jedoch nicht unter absolutem Ausschluss von Prozessen mit niedrigerer Priorität (nun ja, Threads wirklich, aber lassen Sie die Dinge zur Erleichterung der Diskussion in Prozessen bleiben). Was passiert, wenn ein Prozess an die Reihe kommt? Es kann für eine Zeiteinheit laufen, die als Quanten bezeichnet wird. Wie lang ist ein Quantum? Es hängt davon ab, ob...

Hier kann der Vordergrundprozess mehr Ressourcen verbrauchen. Wenn er eine Runde bekommt, kann diese Runde dreimal länger dauern als die Runden der Hintergrundprozesse. Es wird also möglicherweise nicht sehr oft versucht (abhängig von der Priorität), aber wenn dies der Fall ist, wird es länger verschlungen.

Sie können wählen, ob Sie kurze oder lange Quanten verwenden möchten (Standard ist kurz auf dem Betriebssystem der Workstation, lang auf Servern) und ob der Vordergrundprozess verstärkt werden soll oder nicht (Variable für w / s, standardmäßig für Server festgelegt) und, falls erhöht, um wie viel (effektiv bis zu 3 mal). Der knifflige Teil davon ist, dass, wenn Sie den Multiplikator ändern, alles sehr kurze Quantenwerte hat, während beim Deaktivieren der Vordergrundverstärkung alles länger, aber gleich wird. Wenn Sie es natürlich deaktivieren, erhalten Windows-Hintergrunddienste das gleiche Quantum wie Ihre Benutzeranwendungen, was möglicherweise nicht ideal ist. Sie müssen den Wert in der Registrierung unter Verwendung einer Bitmaske unter HKLM \ System \ CurrentControlSet \ Control \ PriorityControl \ Win32PrioritySeparation festlegen. Zur Vereinfachung sind die wahrscheinlichsten Werte, die Sie möchten:

2 = Standardwert, bedeutet, dass Standardwerte mit maximalem Boost verwendet werden. Die Standardeinstellungen für Workstation-Betriebssysteme sind kurz und variabel. 8 = festes, kurzes Quantum (Vordergrund und Hintergrund sind gleich) 40 (dezimal, x28 hex) = fest und lang (dies entspricht den Serverstandards) 36 (dezimal, x24 hex) = kurz, variabel, aber minimale Verstärkung für den Vordergrundprozess . Ich denke, dies ist derjenige, der Ihnen wahrscheinlich den größten Vorteil bietet, wenn Sie die Menge reduzieren, mit der andere Apps konkurrieren, aber Excel ermöglicht, im Vordergrund mehr Ressourcen zu erhalten (solange Sie auch die Priorität erhöhen).

Probieren Sie es aus und sehen Sie, ich hoffe, das hilft - Ihr Kilometerstand 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 für Outlook einige Festplatten-E / A als wichtigere Faktoren für ihre Geschwindigkeit, also ob sie eine erhalten Vordergrundverstärkung oder nicht, der Einfluss auf die sichtbare Leistung liegt wahrscheinlich unter dem, was Sie durch einfache Beobachtung sehen können.


1
Grundsätzlich zeigt Money.com, wie die Einstellung für die Quantenregeln über die XP-GUI geändert wird. Die Korrektur des Registrierungsschlüssels ist jedoch für das Betriebssystem von NT4 bis Windows 7 immer noch dieselbe und daher allgemeiner. Die Einstellung "Hintergrunddienste" entspricht der Einstellung "fest". Beachten Sie, dass dies kein Prioritätsschub ist, sondern die Länge der Zeitscheibe ändert, die jeder Prozess erhält. Priorität ist eine unabhängige Eigenschaft und wird nicht dadurch gestärkt, dass sie im Vordergrund steht.
AdamV

1

Es ist kein Problem, die Priorität eines Prozesses auf "über normal" oder "hoch" zu erhöhen. Setzen Sie sie einfach nicht auf "Echtzeit". Ich kann Ihnen nicht mit Excel helfen.


1

Möglicherweise wird die Prioritätsmanipulation nicht von Excel, sondern von Windows selbst durchgeführt. Windows verfügt über einen Mechanismus, mit dem die Priorität von Prozessen mit Fenstern im Vordergrund erhöht wird. Wenn Excel den Fokus verliert, wird seine Priorität wieder normal (etwas niedriger).

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

Wenn ein verwendeter Prozess NORMAL_PRIORITY_CLASSin den Vordergrund gestellt wird, erhöht der Scheduler die Prioritätsklasse des Prozesses, der dem Vordergrundfenster zugeordnet ist, so dass sie 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 allem, was ich gehört habe, gibt es Möglichkeiten, diesen Prioritätsschub zu deaktivieren.


Ich bin mir darüber nicht sicher. Wenn es so wäre, würde ich erwarten, dass andere Anwendungen merklich langsamer werden, wenn sie nicht fokussiert sind. Ich bemerke jedoch keine Verlangsamung in Outlook, wenn E-Mails synchronisiert werden, wenn der Fokus auf dem Webbrowser liegt, oder sogar eine Verlangsamung in meinem Browser beim Laden einer Seite, wenn ich mich auf das Excel-Fenster konzentriere.
Joe Schmoe

1
Und Zahlenknacker wie BOINC-Tasks werden im Hintergrund mit niedriger Priorität ausgeführt, nutzen jedoch die verfügbare freie CPU-Kapazität voll aus.
Alistair Knock

Diese MSDN-Seite beschreibt altes, sogar altes Verhalten.
Jamie Hanrahan

0

Probieren Sie es einfach aus, es hat bei mir funktioniert.

Nicht sehr schön, aber es hat meine Berechnungsgeschwindigkeit verdoppelt! Tolle! (aber ich werde die Ergebnisse überprüfen, nicht sicher über sie ...)

Ihr Benutzerformular muss sich in 1024 * 768 in der Mitte des Bildschirms befinden. Es wird einfach per Software ein Rechtsklick auf das Benutzerformular gesendet.

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

Versuchen Sie einfach und sagen Sie mir, wie es bei Ihnen 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

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

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

Wenn Sie in der Berechnung auf das Benutzerformular klicken, wird nur die Prozessgeschwindigkeit beschleunigt, das darüber hinausgehende Blatt jedoch nicht vollständig neu berechnet. Ich war genau in Echtzeit mit 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.

Dadurch wird Ihre mit STRG ALT DEL im Task-Manager definierte Prozesspriorität für zukünftige Verwendungen gespeichert.

Mit freundlichen Grüßen,

John

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.