質問: ウィンドウフォーカスがない場合でも、microsoft excelをフルスピードで実行し続けるにはどうすればよいですか? excel 2007(およびおそらく以前のバージョン)にウィンドウフォーカスがある場合、excelはフルスピードで実行されます。つまり、ファイルは高速に開き、長時間実行されるvbaマクロはすばやく実行されます。excelウィンドウがフォーカスを失うと、excelのスレッドの優先度が大幅に低下し、フォーカスを移動したときに開いていた大きなファイルがゆっくり開いたように見え、複雑なvbaマクロはlong完了するまでの時間。フォーカスされているかどうかに関係なく、excelの優先度を高く保つ方法はありますか?タスクマネージャーを使用してスレッドの優先度を人為的に上げることができることは知っていますが、これがスプレッドシートまたはosにどのようなノックオン効果をもたらすかはわかりません。私のシステムは4gb ramの高速デュアルコアで、vista64を実行しています。明確化のための編集:私の問題は、タスクマネージャを介してexcelプロセスの優先度を上げることだけではありません。これは、onlyがウィンドウフォーカスがある場合にexcelに影響するためです。要点は、excelがウィンドウフォーカスを失ったときに何が起こるかです。excelを広範囲に使用すると、設計上、excelウィンドウにフォーカスがない場合に意図的にプロセスの優先度を下げるように見えます。excelプロセスに高い優先度を設定しても、これが発生するのを防ぐことはできません。excelにフォーカスがある場合にのみ高いプロセス優先度が与えられますが、フォーカスが失われると劇的に低下します。通常のexcelの使用法(おそらくそれを使用しているすべての人の99%)では、この効果に気付かないでしょうが、大規模なスプレッドシート(約2000のワークシートだと思います)と実行に数分かかる複雑なvbaマクロでは、効果は非常に大きいです目立つ。理想的には、excelウィンドウがフォーカスされているかどうかに関係なく、同じスレッドの優先順位を維持する必要があります。今までは、処理中にコンピューターから数分間座っていたので、excelウィンドウがクランチしているときに誤ってクリックしないようにしていますが、もっと良い解決策があることを望んでいました...おそらくある種のレジストリハック?編集:私はネット上でこの問題に関するもう1つの言及を見つけただけです このリンク これは関連する見積もりです... ただし、excel 2000ウィンドウをユーザーに表示し、ウィンドウのフォーカスを維持すると、マクロは期待される速度で実行されます。この場合も、ウィンドウにフォーカスがある必要があります。そうしないと、マクロの速度が再び低下します。
回答: ここで考慮すべき点がいくつかあります。プロセスの優先度を変更すると、その基本優先度はすべてのスレッドと、プロセスが開始する他のプロセスに継承されます。現在の優先度は、基本優先度と、ブーストする必要があるかどうかを決定するいくつかの要因で構成されます。フォアグラウンドにあること自体が必ずしも優先度を上げるとは限りませんが、待機状態から抜け出す、またはioは短い一時的なブーストを与えることができます。これらの非常に集中的なワークブックで作業するときに優先度を高くしてexcelプロセスを実行することは理にかなっていると思います。 "優先度の高いexcel"と呼ばれる2つ目のショートカットがこれを行う良い方法だと思います。まず、適切なスイッチを使用して開始コマンドを実行する1行のバッチファイルを作成します。例:_start "high priority excel" /max /high "c:\program files\microsoft office\office12\excel.exe"_(64ビットバージョンのwindowsでは、2010以降でのみ使用可能な64ビットバージョンのofficeも実行していない限り、これはstart "high priority excel" /max /high "c:\program files (x86)\microsoft office\office12\excel.exe"になります_start "high priority excel" /max /high "c:\program files\microsoft office\office14\excel.exe"_)ウィンドウのタイトルに注意してください好きなものにすることができますが、オプションではありません。ここで、これをたとえばhiperexcel.cmdとして便利な場所に保存します。たとえば、officeフォルダー、c:\ scriptsフォルダーなど、またはホームフォルダーを使用して、マシン間を移動できるようにします。このファイルを指す新しいショートカットを作成し、開始フォルダーをファイルが保存されているフォルダーにします。ファイルのアイコンを選択します。excel.exe実行可能ファイルを参照してから、明確にするために通常のexcelアイコン以外のものを選択します。新しいショートカットをクリックすると、優先度の高いプロセスとして実行されているexcelが呼び出され、基本優先度は13になります。実行すると、非リアルタイムプロセスの最大優先度は15になります。他の何かが後押しされたとしても、優先度を高くするべきではありません。フォアグラウンドプロセスは、フォアグラウンドにあるだけでは優先度が上がるわけではないことに注意してください(nt4.0以降ではありません)。では、何が起こっているのでしょうか。これまでにわかったことを要約します。プロセスは優先順位に従って順番を取りますが、優先順位の低いプロセスを完全に排除するわけではありません(まあ、スレッドですが、議論を容易にするために、プロセスに物事を保持できます)。プロセスがその「ターン」を取得するとどうなりますか?クォンタムと呼ばれる単位時間実行されます。クォンタムの長さはどれくらいですか?場合によります...これは、フォアグラウンドプロセスがより多くのリソースを使用できるようになる場所です。ターンを取得すると、そのターンはバックグラウンドプロセスのターンよりも3倍長く続く可能性があります。そのため、(優先度によっては)あまり頻繁に実行されない場合がありますが、実行されると、実行時間が長くなります。短いクォンタムまたは長いクォンタムを使用するか(デフォルトはワークステーションosで短い、サーバーで長い)、フォアグラウンドプロセスをブーストするかどうか(w/sで可変、デフォルトでサーバーで固定)を選択でき、ブーストされている場合は、いくら(事実上最大3回)。さて、これのトリッキーな部分は、乗数を変更することを選択した場合、すべての量子の値が非常に短くなるのに対して、フォアグラウンドブーストを無効にした場合、すべてが長くなりますが、量は等しくなります。もちろん無効にすると、バックグラウンドwindowsサービスはユーザーアプリケーションと同じ量を取得しますが、これは理想的ではない可能性があります。ビットマスクを使用して、hklm\system\currentcontrolset\control\prioritycontrol\win32priorityseparationにあるレジストリの値を設定する必要があります。物事を簡単にするために、あなたが望む最もありそうな値は次のとおりです:2 =デフォルト値、最大ブーストでデフォルトを使用することを意味します。ワークステーションのo/sのデフォルトは短く、可変です。 8 =固定、短いクォンタム(前景と背景が等しい)40(10進数、x28 hex)=固定および長い(これはサーバーのデフォルトと同じ)36(decimal、x24 hex)=短い、可変、ただし前景プロセスのブーストは最小限。これはおそらく、他のアプリが競合する量を減らすために最も大きなメリットをもたらすものだと思いますが、フォアグラウンドにあるときにexcelがより多くのリソースを取得できるようにします(優先度も上げる限り)。試してみてください。これがお役に立てば幸いです。もちろん、マイレージは異なる場合があります。余談ですが、他の多くのアプリケーションやプロセスには、ボトルネックとしてcpuがありません。outlookの同期とieブラウジングの例には、おそらくネットワークがあり、outlookの場合はディスクioがあります。速度のより重要な要素なので、フォアグラウンドでブーストが得られるかどうかにかかわらず、目に見えるパフォーマンスへの影響は、おそらく単純な観察でわかるものを下回ります。