2011-07-07 6 views
3

私は後世の理由と一般的な興味のためにこの質問をしています。数年前、私はWindows内で奇妙な動作に気付きました。私はこれがXPで動作し、その時にはWindows 2000と98でも動作していましたが、この動作はWindows 7でも動作すると思います。Windows OSとメモリ管理 - アプリケーションが最小化されるとどうなりますか?

私の質問をセットアップするには、以下の手順に従って試してみてください。

  1. タスクマネージャを開き、[プロセス]タブに移動します。
  2. かなりの量のメモリを消費することがわかっている(Webブラウザはうまくいくはずです)アプリケーションを開き、タスクマネージャでそのプロセスを見つけます。
  3. アプリケーションのメモリ使用量が大幅に増加するまで、ウィンドウ、ドキュメント、Webページなどを開いてアプリケーションを使用します。
  4. アプリケーションのメモリ使用量に注意し、アプリケーションを最小限に抑えます - アプリケーションが使用しているメモリ量が大幅に減少するはずです。
  5. 最後に、アプリケーションを復元します。

ウィンドウを復元した後で、アプリケーションのメモリ使用量が少し増加するはずですが、アプリケーションを最小限に抑える前と同じくらい近くにする必要があります。これはGUIベースのアプリケーションと全く同じですが、より大きなアプリケーションでは確かに深いことです。

QUESTION OS内

内部的には、どのようなプロセス場所を取るために、この(仮定)ガベージコレクションを強制的に行われていますか?さらに、COMやいくつかの.Netコールを介して、アプリケーションを最小限に抑えることなくこのプロセスを強制する方法がありますか?もしそうなら、ソースコードを提供してください。言語は関係ありません。

私のような人は、同時に多くのアプリケーションを開いておくことができます。メモリ使用量は上に上がる可能性があります。あなたがそれを知る前に、いくつかのアプリケーションを閉じてリソースを解放する必要があります。私がOSにガベージコレクションを強制するメカニズムを制御しているソフトウエアに、少なくとも上記のエクササイズの振る舞いと同様のものを組み込むことができればいいと思う。

私は知っている.NetにはGCオブジェクトがあり、あなたが望むようにゴミ掃除を呼び出すことができます。ただし、アプリケーションが最小化されたときに発生するメモリのクリーンアップの性質とは関連していないようです。

私はこれが頭のスクラッチャーであり、長年にわたる好奇心を持って誰かが私に何が起こっているかの良い、技術的な説明を与えることを望みます。

ページファイルと「ラビット・ホール」のさらに下に行く

興味深いものは、彼らの両方が掲載さKnowledge Base articleを読み込むとKragen &アレックスK.で、この質問に対する答えとして掲載されている、私がいることが見この現象が起こらないようにする方法でもあります。このページングが解放されないようにする場合の例をいくつですか?私はできる限りこれについて多くのことを学ぶためにドキュメントを読むことを試みています。このような情報の多くは、.NETアプリケーション内でこれを実装する必要がないので、私にとっては新しくなっています。ユースケースを考えると、私がなぜこの動作を避けたいのかの推論を理解するのに役立ちます。

+2

ほとんどのアプリケーション(Firefoxを知っています)は、ユーザーに干渉しないため、ウィンドウが最小化されたときにクリーンアップに時間がかかります。どのアプリケーションでこれを試しましたか?あなたはそれがOSレベルのものだと確信していますか? – Earlz

+3

「メモリ使用量」という用語はあまり正確ではありません。ワーキングセット、仮想アドレス空間のサイズ、プライベートバイトなどを意味しますか? –

+0

@ Earlz - これは、すべてのアプリケーション(MS Word、Access、Excel、Webブラウザ、デザイン環境など)と非常に矛盾しないように思われるので、Windowsシステムコール経由で発生していると想定します。最小化される。 – RLH

答えて

7

あなたが見ているプロセスがないガベージコレクションである - Windowsは、フォアグラウンドアプリケーションのためのメモリを解放するために、(それがディスクにできる限りすなわちページングなど多くのメモリ)、「ワーキングセットをトリミング」です。上記のリンクKBの資料では、自動的にWM_SYSCOMMANDコマンドを傍受することによって(これを防ぐことができ、両方の方法について説明し

は、より多くの情報については、以下のリンクを参照してください。 )、およびいつでも明示的にこれを発生させる方法(SetProcessWorkingSetSizeを呼び出す)

+0

優秀!問題は30分以内に解決されました!私は<3 SO !!私がこの行動を研究しようとした最後の時間(おそらく5年前)は答えを見つけることができませんでした。この情報はまさに私が探していたものです。 – RLH

6

ウィンドウを最小化すると、残りのフォアグラウンドアプリケーションのために、そのプロセスのウィンドウがtrim the working setになる可能性があります(SetProcessWorkingSetSize()を呼び出して実行します)。

関連する問題