Jak utrzymywać działanie programu Microsoft Excel z pełną prędkością, nawet jeśli nie jest on aktywny?

10

Zauważyłem, że kiedy program Excel 2007 (i prawdopodobnie wcześniejsze wersje) skupia się na oknie, program Excel działa z pełną prędkością, co oznacza, że ​​pliki otwierają się szybko, a makra VBA działają szybko.

Jeśli okno programu Excel traci fokus, priorytet wątku programu Excel wydaje się gwałtownie spadać, a duże pliki, które otwierały się po powolnym przesunięciu fokusa, a skomplikowane makra VBA zajmują dużo czasu.

Czy istnieje sposób na utrzymanie wysokiego poziomu priorytetu programu Excel niezależnie od tego, czy jest on skoncentrowany, czy nie?

Wiem, że mógłbym sztucznie zwiększyć priorytet wątku za pomocą Menedżera zadań, ale nie jestem pewien, jakie efekty domina mogą mieć to dla moich arkuszy kalkulacyjnych lub systemu operacyjnego.

Mój system to szybki dwurdzeniowy z 4 GB pamięci RAM i działa w systemie Vista 64.

EDYCJA W CELU WYJAŚNIENIA:

Mój problem nie polega po prostu na podniesieniu priorytetu procesu programu Excel za pomocą Menedżera zadań, ponieważ wpływa to tylko na program Excel, gdy jest on skupiony na oknie.

Chodzi o to, co dzieje się, gdy Excel traci fokus okna.

Z obszernego korzystania z programu Excel wydaje się, że z założenia celowo obniża swój priorytet procesu, gdy okno programu Excel nie jest aktywne.

Ustawienie wyższego priorytetu dla procesu Excela nie powstrzymuje tego - to daje Excelowi wyższy priorytet procesu tylko wtedy, gdy ma fokus, ale nadal gwałtownie spada, gdy traci fokus.

W normalnym użyciu programu Excel (prawdopodobnie 99% wszystkich osób korzystających z niego) nie zauważyłbyś tego efektu, ale z ogromnym arkuszem kalkulacyjnym (myślę, że około 2000 arkuszy) i złożonymi makrami VBA, których wykonanie zajmuje kilka minut, efekt jest bardzo zauważalny.

Idealnie, potrzebuję go, aby zachować ten sam priorytet wątku, niezależnie od tego, czy okno programu Excel jest skoncentrowane.

Do tej pory siedziałem kilka minut przed komputerem podczas przetwarzania, aby przypadkowo nie kliknąć okna programu Excel, gdy jest chrupiące, ale miałem tylko nadzieję, że istnieje lepsze rozwiązanie ... być może jakiś hack rejestru?

EDYTOWAĆ:

Pod tym linkiem znalazłem tylko jedną wzmiankę o tym problemie w sieci

To jest odpowiedni cytat ...

Jeśli jednak sprawię, że okno programu Excel 2000 będzie widoczne dla użytkownika, a okno pozostanie aktywne, makra będą działać z oczekiwaną szybkością. Ponownie okno musi być aktywne lub makro zwolni ponownie do indeksowania.

Joe Schmoe
źródło
Dobre pytanie. Okazało się to również irytującą „cechą” i wciąż nie ma realnego rozwiązania ...
Noldorin
Sam priorytet wątku nie ma wpływu na wydajność, chyba że istnieje kilka wątków konkurujących o zasób - w takim przypadku wyższy priorytet otrzymuje pierwszy kawałek ciasta. Dawno nie korzystałem z Excela, ale może on dławić się w tle lub możesz paść ofiarą opóźnionej mechaniki wymiany Windows.
Mark K Cowan,
Dzieje się tak w przypadku wszystkich programów pakietu Office 2007 podczas uruchamiania długich skryptów VBA. Kiedyś napisałem skrypt, który wziął dane Excela i umieścił je w formularzach Word. Jeśli ukryłem program Word, wycięcie spadło do indeksowania. Jeśli pozwoliłem na wyświetlanie programu, skrypt był około 10 razy szybszy.
wbeard52

Odpowiedzi:

6

Wersje inne niż serwerowe Windows domyślnie zapewniają priorytetowe przyspieszenie procesu pierwszoplanowego. Gdy przesuniesz Excela w tło, traci on moc, jaką wcześniej miał na pierwszym planie; niektóre inne programy zamiast tego zyskują priorytet.

Możesz zmienić ustawienie, aby programy nie otrzymywały tego wzmocnienia. Uwaga: nie wpłynie to tylko na program Excel, ale na każdy program, który w innym przypadku kwalifikowałby się do ulepszenia.

Oto jak dostosować ustawienia w systemie Windows XP:

  1. Kliknij prawym przyciskiem Mój komputer .
  2. Wybierz Właściwości .
  3. Kliknij kartę Zaawansowane .
  4. W panelu Wydajność kliknij przycisk Ustawienia .
  5. Kliknij kartę Zaawansowane . Pierwszy panel to Planowanie procesorów :

    Panel planowania procesorów

  6. Zmień go z domyślnego „Programy” na „Usługi działające w tle”, a program Excel powinien zachowywać się bliżej tego, co chcesz, gdy jest w tle.

Chris W. Rea
źródło
Pamiętaj, że dzięki temu programy na pierwszym planie często wydają się powolne, gdy aplikacje i usługi w tle nagle decydują, że chcą coś zrobić.
Mark K Cowan,
„Wersje inne niż serwerowe Windows domyślnie przyspieszają priorytet na pierwszym planie.” Nie, nie robią tego. (Zrobili to wcześniej niż Windows NT 4, ale to bardzo dawno temu.) Robią to, że czas dla pierwszego planu jest 3 razy dłuższy niż czas dla innych procesów (90 ms vs 30). Istnieje również zwiększenie priorytetu +2, które jest stosowane do dowolnego wątku w procesie pierwszoplanowym, gdy rozwiązuje ono oczekiwanie. Problem z oferowanym tutaj rozwiązaniem polega na tym, że powoduje, że przedział czasu jest jeszcze dłuższy, 180 ms. Może to znacznie zaszkodzić responsywności aplikacji intensywnie korzystających z interfejsu użytkownika.
Jamie Hanrahan
4

Nie sądzę, aby w twoim przypadku wystąpił problem ze zmianą priorytetu procesu programu Excel na Above Normal . To nie powinno stanowić problemu.

Nie rób najwyższego poziomu , ponieważ będzie konkurował z procesami systemowymi.
Nie zawieszaj go, bo możesz zawiesić na nim inne rzeczy!


Jeśli korzystasz z Eksploratora procesów Marka Russinowicza , aby sprawdzić priorytety procesów uruchomionych w systemie. Pokazuje następujące wartości priorytetów i ich powiązanie.

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

Możesz użyć eksploratora procesów i spróbować ponownie ustalić priorytety dla programu Excel .
Przenieś go powyżej 8 , ale nie przekraczaj 12
powyżej normalnej przy 10, powinienem się spodziewać.

W ten sam sposób, jeśli uważasz, że jakiś proces zajmuje zbyt dużo czasu procesora, gdy nie jest skupiony, możesz obniżyć jego priorytet aż do Bezczynności .
Zwykle używam do tego tej techniki.

nik
źródło
Ale priorytet nadal spadnie, gdy Excel nie będzie się skupiał, prawda? ... tylko do nieco wyższego poziomu priorytetu niż wcześniej, tak myślę. Czy wiesz, jak zachować spójność priorytetu wątku bez względu na fokus okna?
Joe Schmoe
I ampatrząc na ten szczegół, ale mój zrozumienia jest to, że okno w centrum uwagi będzie zwykle w Normalpriorytecie (domyślnie) i po przeniesieniu Exceldo Above Normalpierwszeństwa, powinien być uruchomiony na wyższym priorytecie niż aktywnym oknie. Ale przy niższym priorytecie procesy systemowe - tam, gdzie chcesz.
nik
O ile nie rozumiem tego, co mówisz, sugerujesz, że możesz podnieść priorytet procesu Excela i pozostanie on na tym samym poziomie przez cały czas. Ale z obszernego korzystania z programu Excel mogę z pewnym przekonaniem stwierdzić, że tak się nie dzieje. Wydaje się, WEDŁUG PROJEKTU, że obniża swój priorytet, gdy okno programu Excel nie jest aktywne. Ustawienie wyższego priorytetu dla procesu Excela nie powstrzymuje tego - to daje Excelowi wyższy priorytet procesu tylko wtedy, gdy ma fokus, ale nadal gwałtownie spada, gdy traci fokus. Właśnie uruchom test, aby to potwierdzić.
Joe Schmoe
Jestem zaskoczony. Chociaż nie użyłem tej techniki do podniesienia priorytetów procesu (tylko w celu ich obniżenia).
nik
Dodałem trochę więcej informacji do pytania, aby podkreślić to celowe obniżanie procesów, które wydaje się mieć miejsce. Idealnie byłoby, gdyby istniał jakiś hack rejestrowy, który by to powstrzymał.
Joe Schmoe
3

Należy tu rozważyć kilka różnych rzeczy: Po zmianie priorytetu procesu ten priorytet podstawowy jest dziedziczony przez wszystkie jego wątki i inne uruchamiane przez niego procesy. Obecny priorytet składa się z priorytetu podstawowego i szeregu czynników, które decydują o tym, czy należy go zwiększyć, czy nie - bycie na pierwszym planie niekoniecznie zwiększa priorytet, ale rzeczy takie jak wyjście ze stanu oczekiwania lub wykonanie operacji zamówienia krótkotrwały tymczasowy impuls.

Sugerowałbym, aby uruchomienie procesu programu Excel z wysokim priorytetem podczas pracy nad tymi bardzo intensywnymi skoroszytami mogło mieć sens, i powiedziałbym, że drugi skrót o nazwie „Excel o wysokim priorytecie” może być dobrym sposobem na zrobienie tego. Najpierw utwórz jednowierszowy plik wsadowy, który uruchamia polecenie start z odpowiednimi przełącznikami, np .:

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

(w 64-bitowej wersji systemu Windows byłoby to możliwe, start "high priority excel" /max /high "C:\Program Files (x86)\Microsoft Office\Office12\EXCEL.EXE"chyba że używasz również 64-bitowej wersji pakietu Office, która jest dostępna tylko od 2010 roku start "high priority excel" /max /high "C:\Program Files\Microsoft Office\Office14\EXCEL.EXE"). Pamiętaj, że tytuł okna może być dowolny, ale nie jest opcjonalny.

Teraz zapisz to jako np. HiperExcel.cmd gdzieś pod ręką - może folder biurowy, folder ac: \ scripts lub coś takiego, lub folder domowy, aby mógł wędrować z urządzenia do komputera. Utwórz nowy skrót, który wskazuje ten plik, ustaw folder początkowy jako folder, w którym plik jest przechowywany. Wybierz ikonę pliku - przejrzyj plik wykonywalny Excel.exe, a następnie wybierz coś innego niż zwykła ikona Excel .

Kliknij nowy skrót, aby wywołać program Excel działający jako proces o wysokim priorytecie, z podstawowym priorytetem 13, a podczas działania prawdopodobnie uzyska maksymalny priorytet dla procesów poza czasem rzeczywistym wynoszący 15. Nawet jeśli coś innego zostanie przyspieszone, nie powinien mieć wyższego priorytetu. Zauważ, że proces pierwszego planu NIE ma pierwszeństwa tylko dlatego, że jest na pierwszym planie (nie od NT4.0). Więc, co się dzieje?

Ponownie wykorzystaj to, co do tej pory znaliśmy: procesy na zmianę następują zgodnie z priorytetem, ale nie do absolutnego wykluczenia procesów o niższym priorytecie (no cóż, naprawdę wątki, ale pozwalamy zachować procesy w celu ułatwienia dyskusji). Co się stanie, gdy proces uzyska swoją „kolej”? Może działać przez jednostkę czasu zwaną kwantową. Jak długo trwa kwant? To zależy...

W tym momencie proces pierwszego planu może zużywać więcej zasobów - gdy otrzyma zwrot, ten zwrot może trwać trzy razy dłużej niż zwroty procesów w tle. Więc może nie dostać się bardzo często (w zależności od priorytetu), ale kiedy to zrobi, będzie go zatrzymywał na dłużej.

Możesz wybrać użycie krótkich lub długich kwantów (domyślnie brak na systemie operacyjnym stacji roboczej, długi na serwerach) i zwiększenie lub przyspieszenie procesu pierwszego planu (zmienne dla w / s, domyślnie ustawione dla serwerów), a jeśli zwiększone, przez ile (efektywnie do 3 razy). Problem polega na tym, że jeśli zdecydujesz się zmienić mnożnik, w rezultacie wszystko będzie miało bardzo krótkie wartości kwantowe, podczas gdy jeśli wyłączysz zwiększanie pierwszego planu, wszystko stanie się dłuższe, ale równe. Jeśli go wyłączysz, usługi Windows w tle będą miały taką samą ilość jak aplikacje użytkownika, co może nie być idealne. Musisz ustawić wartość w rejestrze na: HKLM \ System \ CurrentControlSet \ Control \ PriorityControl \ Win32PrioritySeparation, używając maski bitowej. Aby to ułatwić, najbardziej prawdopodobne wartości, które powinny być:

2 = wartość domyślna, oznacza użycie wartości domyślnych z maksymalnym wzmocnieniem. wartości domyślne na O / S stacji roboczej są krótkie i zmienne. 8 = ustalone, krótkie kwantowe (pierwszy plan i tło są równe) 40 (dziesiętny, x28 szesnastkowy) = ustalone i długie (jest to to samo, co ustawienia domyślne serwera) 36 (dziesiętny, x24 szesnastkowy) = krótkie, zmienne, ale minimalne wzmocnienie dla pierwszego planu . Myślę, że jest to ten, który prawdopodobnie przyniesie największe korzyści w zmniejszeniu ilości konkurujących innych aplikacji, ale pozwoli Excelowi uzyskać więcej zasobów na pierwszym planie (o ile również podniesiesz jego priorytet).

Spróbuj i przekonaj się, mam nadzieję, że to pomoże - Twój przebieg może się oczywiście różnić.

Poza tym: wiele innych aplikacji lub procesów nie ma procesora jako wąskiego gardła - twoje przykłady synchronizacji Outlooka i przeglądania IE prawdopodobnie mają sieć, a być może dla Outlooka niektóre dyskowe operacje we / wy jako ważniejsze czynniki ich prędkości, więc czy dostaną wzmocnienie pierwszego planu, czy nie, wpływ widocznej wydajności jest prawdopodobnie poniżej tego, co widać po prostej obserwacji.

AdamV
źródło
1
BasicallyMoney.com pokazuje, jak zmienić ustawienie reguł kwantowych za pomocą GUI XP, ale poprawka klucza rejestru jest nadal taka sama dla systemu operacyjnego od NT4 do Windows 7, więc jest bardziej ogólna. Ustawienie „Usługi w tle” jest takie samo, jak ustawienie „naprawiono”. I zauważ, że nie jest to przyspieszenie priorytetowe, zmienia ono długość „szczeliny czasowej”, jaką otrzymuje każdy proces. Priorytet jest niezależną własnością i nie jest zwiększany przez bycie na pierwszym planie.
AdamV
1

Nie ma problemu ze zwiększeniem priorytetu procesu do „powyżej normalnego” lub „wysokiego”, po prostu nie ustawiaj go na „w czasie rzeczywistym”. Nie mogę ci pomóc z Excelem szczególnie przykro.

LachlanG
źródło
1

Możliwe jest, że manipulacja priorytetami nie jest wykonywana przez program Excel, ale przez sam system Windows. Windows ma mechanizm, w którym priorytet procesów z oknami na pierwszym planie jest zwiększony; więc kiedy Excel traci fokus, jego priorytet wraca do normy (która jest nieco niższa).

Jedyną stroną w MSDN, którą mogłem znaleźć na ten temat za pomocą szybkiego wyszukiwania, są Priorytety :

Gdy proces, który wykorzystuje, NORMAL_PRIORITY_CLASSzostaje przeniesiony na pierwszy plan, program planujący podnosi klasę priorytetu procesu powiązaną z oknem pierwszego planu, tak że jest on większy lub równy klasie priorytetu dowolnych procesów w tle. Klasa priorytetu powraca do pierwotnego ustawienia, gdy proces nie znajduje się już na pierwszym planie.

Z tego, co słyszałem, są sposoby na wyłączenie tego priorytetowego wzmocnienia.

CesarB
źródło
Nie jestem pewien co do tego. Gdyby tak było, oczekiwałbym, że inne aplikacje zauważalnie zwolnią, gdy nie będą skoncentrowane. Ale nie zauważam spowolnienia, powiedzmy, Outlooka, jeśli synchronizuje wiadomości e-mail, gdy fokus jest ustawiony na przeglądarce internetowej, ani nawet spowolnienia w mojej przeglądarce, ładując stronę, jeśli jestem skupiony na oknie Excela.
Joe Schmoe
1
A urządzenia do kruszenia liczb, takie jak zadania BOINC, działają w tle z niskim priorytetem, ale w pełni wykorzystują dostępną wolną moc procesora.
Alistair Knock
Ta strona MSDN opisuje stare, nawet starożytne, zachowanie.
Jamie Hanrahan
0

Po prostu spróbuj, to zadziałało dla mnie.

Niezbyt przyjemny sposób, ale tak naprawdę podwoił moją prędkość obliczeniową! Niesamowity! (ale sprawdzę wyniki, nie jestem pewien ...)

Formularz użytkownika musi znajdować się na środku ekranu w rozdzielczości 1024 * 768. Wystarczy wysłać przez oprogramowanie prawym przyciskiem myszy formularz użytkownika.

Pełne obliczenia, ale nie używaj komputera podczas obliczeń (uruchamiaj inne programy, Windows ..).

Po prostu spróbuj mi powiedzieć, jak Ci się udało!

'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`
Jan
źródło
0

Po długiej nocy pełnej kalkulacji prędkości i po sprawdzeniu wyniki tego ranka były ... całkowicie błędne.

Myślę więc, że to tylko błąd, obliczenia nie są właściwie wykonane.

Kliknięcie formularza użytkownika w obliczeniach tylko przyspiesza szybkość procesu, ale nie do końca ponownie oblicza arkusz poza nim. Wyjaśniłem, że byłem w czasie rzeczywistym z prio.

Kolejną miłą rzeczą jest dostosowanie zadania procesu za pomocą prio_x64_199_2367.exe, http://softziz.com/2010/11/prio-64-bit-1-9-9/

Zapisuje to priorytet procesu zdefiniowany za pomocą CTRL ALT DEL, wewnątrz menedżera zadań, do przyszłych zastosowań.

Z poważaniem,

Jan

Jan
źródło