Windows 7はメモリを「食べます」。 それは悪いですか?

インターネットでは、「はいWindows 7-吸います!」というスタイルで多くの怒っているコメントを聞きました。 「証拠として、以下のようなスクリーンショットが提供され、再び、すべてが「曲がったヒンドゥー教のプログラマー」に書き戻されます。」 これらのMicrosoftプログラマーに対する襲撃がどのように正当化されるかを見てみましょう。



画像

8ギガバイトのメモリを搭載したコンピューターを購入したとします。 しかし、実際には1ギガバイトの強度で使用されているもので、残りのメモリはすべてアイドル状態です-とても良いですか? Windows VistaおよびWindows 7のリリースにより、RAMを使用する方法が劇的に変わりました。現在、OSは利用可能なすべてのメモリを可能な限り効率的に使用しようとしています。 特に、SuperFetchという機能がWindows VistaおよびWindows 7に登場しました。

SuperFetchとは何ですか?

SuperFetchは、svchostシステムプロセス内で実行されるシステムサービスです。 そのコードはDLL%SystemRoot%\ System32 \ Sysmain.dll内にあります。 このサービスは、ユーザーが起動するアプリケーションと、アクセスする実行可能ファイルとデータファイルを常に監視します。 この情報はすべて、%SystemRoot%\ Prefetchディレクトリの* .db拡張子を持つファイルに保存されます。 なぜこれがすべて行われたのですか? しかし、何のために:SuperFetchサービスは、ユーザーが最も頻繁に作業するアプリケーションに関する情報を持ち、対応するコードとデータをメモリにプリロードします。ユーザーがアプリケーションを起動すると、必要な情報はすべてメモリ内にあり、起動は非常に多くなりますより高速-ハードドライブから情報を読み取る必要がないため。 これは、MS Officeファミリなどの「重い」アプリケーションで特に顕著であり、その機能は数十から数百のexe-shnikovおよびdll-okに「広がる」ことができます。 SuperFetchは非常に「スマート」なので、ユーザーの好みを1日のさまざまな日時に決定することもできます。たとえば、平日はWordとExcelを使用し、週末はCall of Dutyをプレイし、それに応じてロードしますメモリにはデータが必要です。 したがって、このメモリ領域は「占有」とマークされ、タスクマネージャに表示され、「メモリリーク」の印象を与えます。 それでも、メモリの割り当てを必要とするアプリケーションが突然起動した場合、メモリマネージャは必要なスペースを静かに解放し、アプリケーションが終了すると、メモリが解放され、データが再度ロードされます。

たとえば、一部のアプリケーションが作業を終了してメモリを解放した場合、SuperFetchは新しくアンロードされたコードとデータをロードする要求でメモリマネージャにアクセスします。 このプロセスは、低速で優先度が低く(非常に低い)行われるため、SuperFetchの動作によってパフォーマンスが低下することはありません。 たとえば、タバコを吸うように移動し、この時点でメモリを必要とするバックグラウンドプロセス(ウイルス対策スキャンなど)が開始された場合、操作したアプリケーションのコードとデータはおそらくメモリからアンロードされます。 SuperFetchのおかげで-煙突から復帰するまでに、アクティブなアプリケーションのデータは完全にまたは部分的にメモリにロードされます。

さらに、SuperFetchは、休止状態、休止状態、および高速ユーザー切り替えを処理できます。 たとえば、システムが休止状態になると、SuperFetchは休止状態を終了した後に使用される可能性が最も高いと思われるアプリケーションのコードとデータをhiberfil.sysファイルに保存します。 この「意見」はどのように形成されますか? それは非常に簡単です-Big Brother SuperFetchはあなたと、以前の休止状態を終了した後に開始したものを管理し、これに基づいて、次回休止状態を終了すると、おそらくICQを起動してお気に入りのブラウザーを開くと想定できます「habrahabr」を読みます。 さて、1〜2時間後-Visual Studioを開きます。プロジェクトが開始されており、期限が「昨日」であるためです。



同じタスクマネージャーを使用して、SuperFetchの動作を確認できます。

画像



Windows Vista / 7をしばらく使用すると、空きメモリの量が減ることに気付くでしょう。 これは、SuperFetch標準のWindowsシステムキャッシュが、ディスクからデータをキャッシュするために使用可能なメモリをリサイクルしようとしているという事実によるものです。 たとえば、Windowsの読み込み直後にタスクマネージャーを実行すると、空きメモリが減少し、キャッシュメモリが増加していることがわかります。 「メモリ不足」プログラムを実行するか、大きなファイルのコピーを開始すると、Free Memoryが増加し、「Physical Memory Usage」グラフが急激に低下します。これは、システムが実行中のアプリケーション用にメモリを解放しますが、その後ゆっくりと成長し始めるためです-アプリケーション自体がこのメモリを使用し始めるためです。 ただし、SuperFetchは時間の経過とともに、最近ダウンロードしたデータをメモリにロードするため、キャッシュメモリの値は増加し、空きメモリは減少します。



面白かったと思います。 ご清聴ありがとうございました。 質問とマトユキ-よくわかりました。



Mark Russinovichの記事「Inside the the Windows Vista Kernel」に基づく





PS同様の機能はWindowsだけではありません。 特に、Linuxでも使用されており、プリロードと呼ばれます。 Linuxsoidはコメントできます。



All Articles