メモリを解放するためには、前回の記事で紹介したマイクロソフト公式ツール(現在非公開)のrktools.exeが必要である事をご了承下さい。
メモリの状況を見る「MEM」コマンド
powerShellでメモリの状況を見る「MEM」コマンドです。
#メインRAMのモニター
function MEM() {
$all=(Get-CimInstance -Class Win32_OperatingSystem | %{($_.TotalVisibleMemorySize)});
$free=(Get-CimInstance -Class Win32_OperatingSystem | %{($_.FreePhysicalMemory)});
$use=$all-$free;
$all=[Math]::Round(($all/[Math]::Pow(1024,2)),3,[MidpointRounding]::AwayFromZero);
$free=[Math]::Round(($free/[Math]::Pow(1024,2)),3,[MidpointRounding]::AwayFromZero);
$use=[Math]::Round(($use/[Math]::Pow(1024,2)),3,[MidpointRounding]::AwayFromZero);
$OutputEncoding = [console]::OutputEncoding;
Write-Host "---メインRAM ---";
Write-Host "ALL (GB)= " ($all).ToString();
Write-Host "FREE(GB)= " ($free).ToString();
Write-Host "USED(GB)= " ($use).ToString();
}
これをROG FLOW Z13で実行すると以下のようになります。
↑タスクマネージャーやARMOURY CREATEを開かなくとも、「MEM」コマンドをpowerShell(管理者モード)でメモリの全体・残量・使用中が見られます。
ここからが本題で、で、見られたからなんなの?という先の話となります。
前の記事のrktools.exeをインストールし、例によって管理者モードでpowerShellを起動するのが前提で、「EMPTY」コマンドを入力すると、メモリが解放されます。
コマンドは以下です。
#メインRAMをクリーンアップ
function EMPTY() {
CMD /C "empty *";
#CLEAR-HOST;
MEM;
}
いつもながら私の勝手な自作なので、内容は自由に変えてやって下さい。
連打が可能!!ここがMS PC Managerとの大きな違い!!
このEMPTYコマンドですが、連打が可能です。ここがMS PC Managerとの大きな違いです。
もちろん、モグラ叩きという表現の通り、すぐにボコボコ復活してくるので、打つべし、打つべし!!です。
当初、8GB台の消費量があっという間に4GB台に下がったのがお分かりかと思います。
そんな、打つべし、打つべしって、手作業で何回もやってらんねぇ!!という時は、次に自動実行コマンド「AUTO-EMPTY」です。
定期的にEMPTYを実行できる「AUTO-EMPTY」コマンド。ミリ秒単位で実行間隔が選べるよ
EMPTYコマンドを自分で連打するのは、めんどくさすぎる!!という場合は、以下に自動実行のAUTO-EMPTYをご用意しております。これはパラメーターが必要で、たとえば1秒間隔であれば「AUTO-EMPTY 1000」とします。
ただ、あんまり頻繁に動かすと、CPUによっては、Excelなどのアプリの実行速度を遅くしてしまう可能性もあるので、10秒間隔がおすすめ。
「AUTO-EMPTY 10000」で10秒間隔となります。
#自動メモリ解放
function AUTO-EMPTY($waitTime) {
$CNT = 0;
while ($true) {
EMPTY;
$CNT++;
WRITE-OUTPUT ("メインRAMを自動開放中 [ "+(([float]$waitTime/1000).ToString("0.0000"))+" ] 秒間隔");
WRITE-OUTPUT ("開放回数 [ " + ($CNT) + " ] 回")
START-SLEEP -M $waitTime;
}
}
10秒間隔だと、その間にメモリ使用量が復活して来て、前よりも使用量が多くなったりしてますが。
後ろでこの処理を実行していると、たとえメインRAMを8GBしか搭載してないPCでも、開発用にSQL-Serverをまともに運用できたりします。
SQL-Serverはメモリがなくなるとどうなるか、たとえ一行のSELECT文、一項目のCREATE TABLEでも、結果が数分間も帰って来なくなったりします。
まぁ、マイクロソフト非公開ツールがバックの自作コマンドなので、使って欲しいとはとても言えませんが、このようにして工夫してやってますというエピソードとして捉えてもらえれば幸いです。