ウィンドウフォーカスがない場合でも、Microsoft Excelをフルスピードで実行し続けるにはどうすればよいですか?


10

Excel 2007(およびおそらく以前のバージョン)にウィンドウフォーカスがある場合、Excelはフルスピードで実行されます。つまり、ファイルは高速に開き、長時間実行されるVBAマクロはすばやく実行されます。

Excelウィンドウがフォーカスを失うと、Excelのスレッド優先度が大幅に低下し、フォーカスを移動したときに開いていた大きなファイルがゆっくりと開いたように見え、複雑なVBAマクロの完了には長い時間がかかります。

Excelがフォーカスされているかどうかに関係なく、Excelの優先度を高く保つ方法はありますか?

タスクマネージャーを使用してスレッドの優先度を人為的に上げることができることは知っていますが、これがスプレッドシートやOSにどのような影響を与えるかはわかりません。

私のシステムは4Gb RAMの高速デュアルコアで、Vista 64を実行しています。

明確化のための編集:

私の問題は、タスクマネージャーを介してExcelプロセスの優先順位を上げることだけではありません。これは、ウィンドウフォーカスがあるときにのみ Excelに影響するためです。

ポイントは、Excelがウィンドウフォーカスを失うとどうなるかです。

広範囲にExcelを使用してから、ように見えるデザインで Excelのウィンドウにフォーカスがないとき、それは意図的に独自のプロセスの優先度を下げます。

Excelプロセスの優先度を高く設定しても、これが発生するのを防ぐことはできません。Excelにフォーカスがある場合にのみ優先度が高くなりますが、フォーカスを失った場合でも劇的に低下します。

通常のExcelの使用(おそらくそれを使用している全員の99%)では、この効果に気付かないでしょうが、大規模なスプレッドシート(​​約2000のワークシート)と、実行に数分かかる複雑なVBAマクロを使用すると、効果は非常に高くなります。目立つ。

理想的には、Excelウィンドウがフォーカスされているかどうかに関係なく、同じスレッドの優先度を維持する必要があります。

今までは、処理中に数分間コンピューターから離れて座っていたので、Excelウィンドウが壊れてしまったときに誤ってExcelウィンドウをオフにしないようにしましたが、より良い解決策があったことを願っていました...ある種のレジストリハック?

編集:

私はこのリンクでネット上でこの問題について他に1つの言及を見つけたことがありません

これは関連する引用です...

ただし、Excel 2000ウィンドウをユーザーに表示し、ウィンドウにフォーカスを合わせたままにすると、マクロは期待どおりの速度で実行されます。この場合も、ウィンドウにフォーカスがある必要があります。そうしないと、マクロの速度が再び低下します。


良い質問。これも私にとって苛立たしい「機能」であることが証明されていますが、それでも実際の解決策はありません...
Noldorin

スレッドの優先順位自体は、リソースをめぐって競合するスレッドがいくつかない限り、パフォーマンスに影響を与えません。その場合、優先順位の高い方がパイの最初のスライスを取得します。私は長い間Excelを使用していませんでしたが、バックグラウンドでExcel自体が抑制されているか、Windowsのやや遅延したスワッピングメカニズムの犠牲になっている可能性があります。
Mark K Cowan、2014

これは、長いVBAスクリプトを実行すると、すべてのOffice 2007プログラムで発生します。かつて、Excelデータを取得してWordフォームに配置するスクリプトを作成しました。Wordプログラムを隠した場合、実行はクロールに落ちました。プログラムの表示を許可した場合、スクリプトは約10倍速くなりました。
wbeard52 2015年

回答:


6

Windowsの非サーバーエディションでは、デフォルトで、フォアグラウンドプロセスに優先順位の高いブーストが提供されます。Excelをバックグラウンドにプッシュすると、以前はフォアグラウンドにあったブーストが失われます。代わりに、他のいくつかのプログラムが優先順位を上げます。

プログラムがこのブーストを取得しないように設定を変更できます。注:これはExcelだけではなく、ブーストの対象となるプログラムにも影響します。

Windows XPで設定を微調整する方法は次のとおりです。

  1. [ マイコンピュータ ]を右クリックします。
  2. プロパティを選択します
  3. 詳細」タブをクリックします。
  4. パフォーマンスパネル、クリックし[設定]ボタンをクリックします。
  5. 詳細」タブをクリックします。最初のパネルはプロセッサのスケジューリングです:

    プロセッサスケジューリングパネル

  6. これをデフォルトの「プログラム」から「バックグラウンドサービス」に変更すると、Excelがバックグラウンドで動作しているときに、希望どおりに動作するようになります。


これを行うと、バックグラウンドのアプリケーションやサービスが突然何かを実行したいと判断したときに、フォアグラウンドプログラムがしばしば遅くなることに注意してください。
Mark K Cowan

「Windowsの非サーバーエディションは、デフォルトで、フォアグラウンドプロセスに優先順位の高いブーストを提供します。」いいえ、ありません。(Windows NT 4より前のバージョンですが、それはかなり前のことです。)フォアグラウンドプロセスのタイムスライスを他のプロセスのタイムスライスの3倍にする(90ミリ秒対30)。待機を解決するときに、フォアグラウンドプロセスのスレッドに適用される+2優先度のブーストもあります。ここで提供されるソリューションの問題は、タイムスライスが180ミリ秒とさらに長くなることです。これは、UIを多用するアプリの応答性を劇的に低下させる可能性があります。
Jamie Hanrahan、

4

私の場合、Excelプロセスの優先度を通常より上に変更しても問題はないと思います。それは問題ではないはずです。

システムプロセスと競合する最高値にしないでください。一時停止
しないでください。一時停止しないでください。


Mark RussinovichProcess Explorer
を使用して、システムで実行されているプロセスの優先順位を確認する場合。
次の優先度の値とその関連付けを示しています。

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

プロセスエクスプローラーを使用して、Excelの優先順位付けをいくつか試すことができます
上に移動8、しかしを超えていない12
以上ノーマル10行う必要があり、私は期待しています。

同じように、フォーカスがないときに一部のプロセスがプロセッサ時間を使いすぎていると思われる場合は、優先度をIdleまで下げることができます。
私は通常、この手法を使用します。


しかし、Excelにフォーカスがない場合でも、優先度は下がりますね。以前よりも少し高い優先度レベルになっていると思います。ウィンドウのフォーカスに関係なく、スレッドの優先順位を一定に保つ方法を知っていますか?
Joe Schmoe、2009

amはこの詳細を探していますが、私が理解しているのは、フォーカスされているウィンドウは通常Normal優先度(デフォルト)でありExcelAbove Normal優先度に移動すると、フォーカスされているウィンドウよりも高い優先度で実行されるはずです。ただし、優先度が低いと、システムが処理します。
nik 09/07/17

私があなたの言っていることを誤解していない限り、あなたの含意は、Excelプロセスの優先順位を上げることができ、それは常にその優先順位に留まるということです。しかし、Excelを幅広く使用していることから、Excelはそれを実行しないと確信を持って言うことができます。BY DESIGNのように見えますが、Excelウィンドウにフォーカスがない場合は、優先順位が低くなります。Excelプロセスの優先度を高く設定しても、これが発生するのを防ぐことはできません。Excelにフォーカスがある場合にのみ優先度が高くなりますが、フォーカスを失った場合でも劇的に低下します。これを確認するテストを実行してください。
Joe Schmoe、2009

びっくりです。ただし、この手法を使用してプロセスの優先順位を上げることはありません(下げるだけです)。
nik

進行中のように見えるこの意図的なプロセス低下を強調するために、質問にいくつかの情報を追加しました。理想的には、このような事態を防ぐためのレジストリハックが存在するはずです。
ジョーシュモー2009

3

ここで考慮すべき点がいくつかあります。プロセスの優先順位を変更すると、その基本優先順位は、そのプロセスのすべてのスレッドと、それが開始する他のプロセスに継承されます。現在の優先度は、基本優先度とそれをブーストする必要があるかどうかを決定するいくつかの要因から構成されています-フォアグラウンドにいること自体が必ずしも優先度をブーストするわけではありませんが、待機状態からの脱出やIOの実行などは可能です一時的にブーストします。

これらの非常に集中的なワークブックで作業するときに優先度を高くしてExcelプロセスを実行することは理にかなっていると思います。 "優先度の高いExcel"と呼ばれる2番目のショートカットがこれを行う良い方法だと思います。最初に、適切なスイッチを使用して開始コマンドを実行する1行のバッチファイルを作成します。例:

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

(64ビットバージョンのWindowsではstart "high priority excel" /max /high "C:\Program Files (x86)\Microsoft Office\Office12\EXCEL.EXE"、64ビットバージョンのOfficeも実行している場合を除きます。これは2010以降でのみ利用可能ですstart "high priority excel" /max /high "C:\Program Files\Microsoft Office\Office14\EXCEL.EXE")ウィンドウのタイトルは自由に指定できますが、オプションではないことに注意してください。

これを、たとえばHiperExcel.cmdという便利な場所に保存します。多分、officeフォルダー、またはac:\ scriptsフォルダーなどのホームフォルダー、またはホームフォルダーを保存して、マシン間で移動できるようにします。このファイルを指す新しいショートカットを作成し、開始フォルダーをファイルが保存されているフォルダーにします。ファイルのアイコンを選択します- わかりやすくするために、Excel.exe実行可能ファイルを参照し、通常のExcelアイコン以外のものを選択します。

新しいショートカットをクリックすると、基本優先度13の高優先度プロセスとして実行されているExcelが呼び出され、実行時に非リアルタイムプロセスの最大優先度15が取得される可能性があります。優先度が高くなることはありません。フォアグラウンドプロセスは、フォアグラウンドにいるためだけに優先順位が上がるわけではないことに注意してください(NT4.0以降ではありません)。それで、何が起こっているのですか?

これまでにわかったことを要約します。プロセスは、優先順位に従って順番を取ることができますが、優先順位の低いプロセスを完全に除外するわけではありません(まあ、スレッドですが、議論を容易にするために、プロセスに物事を保持できます)。プロセスがその「ターン」を取得するとどうなりますか?クォンタムと呼ばれる時間の単位で実行されます。量子はどのくらいですか?場合によります...

これは、フォアグラウンドプロセスがより多くのリソースを使用できるようになる場所です-ターンを取得すると、そのターンはバックグラウンドプロセスのターンより3倍長く続く可能性があります。そのため、(優先度によっては)頻繁には実行されない可能性がありますが、実行されると、より長く占有されます。

短いクォンタムまたは長いクォンタム(デフォルトはワークステーションOSで短い、サーバーでは長い)を使用するか、フォアグラウンドプロセスをブーストするかどうか(w / sで可変、デフォルトではサーバーで固定)を選択できます。どれくらい(事実上3回まで)。さて、これのトリッキーな部分は、乗数を変更することを選択した場合、すべての量子の値が非常に短いことになりますが、フォアグラウンドブーストを無効にした場合、すべてが長くなりますが、量は等しくなります。もちろん、無効にすると、バックグラウンドウィンドウサービスはユーザーアプリケーションと同じ量を取得するため、理想的ではない可能性があります。ビットマスクを使用して、HKLM \ System \ CurrentControlSet \ Control \ PriorityControl \ Win32PrioritySeparationにあるレジストリに値を設定する必要があります。物事を簡単にするために、あなたが望む最もありそうな値は次のとおりです:

2 =デフォルト値。最大ブーストでデフォルトを使用することを意味します。ワークステーションO / Sのデフォルトは短く可変です。8 =固定、短いクォンタム(フォアグラウンドとバックグラウンドが等しい)40(10進数、16進数x28)=固定、ロング(これはサーバーのデフォルトと同じ)36(10進数、16進数x24)=フォアグラウンドプロセス用の短い可変の最小ブースティング。これはおそらく、他のアプリが競合する量を減らすために最も大きなメリットをもたらすものだと思いますが、Excelがフォアグラウンドでより多くのリソースを取得できるようにします(優先度も上げる限り)。

試してみてください、これが役に立てば幸いです-あなたの走行距離はもちろん異なる場合があります。

余談ですが、他の多くのアプリケーションまたはプロセスにはボトルネックとしてCPUがありません-Outlook同期とIEブラウジングの例にはおそらくネットワークがあり、Outlookの場合は速度のより重要な要素としてディスクIOがあるため、フォアグラウンドブーストの有無にかかわらず、目に見えるパフォーマンスへの影響は、おそらく単純な観察でわかるものを下回ります。


1
BasicallyMoney.comは、XP GUIを介してクォンタムルールの設定を変更する方法を示していますが、レジストリキーの修正は、NT4からWindows 7までのOSでも同じなので、より一般的です。「バックグラウンドサービス」の設定は、「固定」の設定と同じです。また、これは優先順位の向上ではなく、各プロセスが取得する「タイムスライス」の長さを変更することに注意してください。優先度は独立したプロパティであり、フォアグラウンドにいることで後押しされることはありません。
AdamV、2009年

1

プロセスの優先度を「通常より上」または「高」に上げても問題はありません。「リアルタイム」に設定しないでください。特に申し訳ありませんが、Excelのサポートはできません。


1

優先操作はExcelではなくWindows自体によって行われている可能性があります。ウィンドウには、ウィンドウがフォアグラウンドにあるプロセスの優先順位を上げるメカニズムがあります。そのため、Excelがフォーカスを失うと、優先度は通常(わずかに低い)に戻ります。

クイック検索でこれについて見つけることができるMSDNの唯一のページはPriority Boostsです。

を使用するプロセスがNORMAL_PRIORITY_CLASSフォアグラウンドに移動すると、スケジューラは、フォアグラウンドウィンドウに関連付けられているプロセスの優先度クラスを引き上げて、バックグラウンドプロセスの優先度クラス以上になるようにします。優先度クラスは、プロセスがフォアグラウンドでなくなると、元の設定に戻ります。

私が聞いたことから、その優先度の引き上げを無効にする方法があります。


これについてはよくわかりません。その場合、他のアプリケーションが集中していない場合は、著しく遅くなることを期待します。しかし、WebブラウザーにフォーカスがあるときにOutlookがメールを同期している場合、Outlookの速度低下に気付かなかったり、Excelウィンドウにフォーカスしている場合、ブラウザーのページの読み込み速度が低下したりすることもありません。
Joe Schmoe、2009

1
また、BOINCタスクのような数値クランチャーはバックグラウンドで低い優先度で実行されますが、利用可能な予備のCPU容量を最大限に活用します。
Alistair Knock

そのMSDNページは、古い、さらには古い動作を説明しています。
Jamie Hanrahan、

0

これを試してみてください、私にとってはうまくいきました。

あまりいい方法ではありませんが、実際には計算速度が2倍になっただけです。すごい!(しかし、結果は確認しますが、よくわかりません...)

ユーザーフォームは1024 * 768で画面の中央にある必要があります。ソフトウェアでユーザーフォームを右クリックするだけで送信できます。

完全な計算ですが、計算中はコンピュータを使用しないでください(他のプログラム、ウィンドウなどを起動します)。

試してみて、それがどのように機能したかを教えてください!

'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

全速計算の長い夜の後、そしてチェックの後、今朝の結果は...完全に間違っていました。

だから、それは単なるバグだと思います。計算が適切に行われていません。

計算でユーザーフォームをクリックしても、処理速度は速くなりますが、シートを完全に再計算するわけではありません。私は正確にプリオとリアルタイムでいた。

もう1つの良い点は、prio_x64_199_2367.exe、http: //softziz.com/2010/11/prio-64-bit-1-9-9/でプロセスタスクを微調整することです。

これにより、将来の使用のために、タスクマネージャー内のCTRL ALT DELで定義されたプロセスの優先順位が保存されます。

敬具、

ジョン

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.