12/12はじめにパソコンを使っていると、いつの間にか残りメモリーが少なくなることがありませんか。Windowsはメモリーが足りなくなるとスワップをおこし、パフォーマンスが低下します。これを防ぐにはどうすればいいでしょう。実はWindowsは無駄な情報をメモリー上に保持していることがあります。いったものを取り除くことができれば、空きメモリーの量も増えるのではないでしょうか。メモリー内のゴミを取り除くお掃除ソフトがあればいいのです。実際、そういったフリー・シェア・商用ソフトは存在しています。これらのソフトはどういった原理で動いているのでしょうか。動作原理自体はさほど難しくなく、物理メモリーを大量に確保して、開放する、といった動作をしているだけです。それでメモリーのお掃除ができるかというと、物理メモリーを確保しろとWindowsに命令するとWindowsは確保してくれます。この時、物理メモリーが不足すると、メモリー上にある無駄な情報を解放し、また、他の動作中のアプリケーションの情報等を仮想メモリーに移動させ、物理メモリーを確保するように努めます。確保したメモリーを開放すると、不要な情報はなくなりメモリーがきれい?になります。作り方VBでこのようなソフトを作るにはVBの標準の関数だけでは実現できません。そこでメモリー関係のWin32API関数を使います。Win32APIの定義からいきます。Byte)それでは、作り方を説明します。メモリーの確保の方法から説明します。メモリーを確保するにはVirtualAlloc関数を使います。&H200)変数lpMemは確保したメモリーのベースアドレスが入ります。これは、後で使うので変数に保存しておかなくてはなりません。各引数について説明します。確保するメモリーの希望の開始アドレスを指定するみたいです。次のlngByteは確保したいメモリーのサイズをバイト単位で指定します。次の&H1000は確保する方法を指定します。&H1000で物理メモリーに確保します。&H200はアクセス方法を指定してます。各パラメータの内容についての説明は省きます。確保したメモリーは開放しなくてはなりません。開放するにはVirtualFree関数を使います。&H4000)各引数について説明します。lpMemは開放したいメモリー領域のベースアドレスを指定します。次のlngByteは開放したいメモリーのサイズ、最後の&H4000は開放する方法をしていします。次に確保したメモリーを初期化します。VBでは変数を宣言する(しなくても)と特に何もしなくても初期化されてますが、これはVBが特殊なだけであって、通常は初期化しなくてはいけません。初期化に使う関数がFillMemory関数です。lpMemは初期化したいメモリー領域のアドレスで、次のlngByteは初期化したいサイズ、最後の0は初期化に使う値です。初期化に使う値は指定した値でそのメモリー領域を埋めます。通常は0でいいと思います。最終的にメモリーお掃除ソフトはこんなふうになります。Sub基本的な部分のみなので、使い勝手はよくありません。使い方は掃除をしたいメモリーのサイズをコマンドラインオプションにつけます。普通に起動させると32メガバイトほどお掃除します。