ワタクシ、1月に転職しまして。
介護用の事務ソフトを開発している会社に。
すっごいんですよ。
PCが
Core2Duo DDR2 4GB Windows10
なんですよw
今はまだ勉強中で開発してないのでいいんですけどね。
他の人のPCを新しいのに入れ替えしてるみたいなので、これが開発機にならないと信じてる。
開発しないといっても最近のアプリは結構メモリ喰うので、chromeとVSCodeとエクセルを起動するともういっぱいいっぱい。
メモリ使用量が80%近くになったら解放しないと作業なんてできません。。。
で。
メモリ開放するいいコマンドないかなーと思ったらマイクロソフトの純正ツールでできるとのこと。
やってみたら簡単なのに効果が結構高かったのでメモ。
目次
ツールをインストールする
Windows Resource Kitsをインストールする
もともとWindows server 2003用のツールですが、Windows10でもちゃんと動きます。
こちらからインストーラをダウンロードしてください。
ダウンロードしたrktools.exeをクリックするとインストーラが起動します。
英語ですが、特に変更なしで大丈夫です。
I Agreeにチェックを入れてNextをクリック。
そのままNextをクリック。
インストール先を後で開くので、パスを控えておきます。
Install Nowで完了です。
これでインストール終了です。
empty.exeをコピーする
先ほどメモしたインストール先を開くと、「empty.exe」というのがいるのでこれをコピーします。
コピーする先ですが…
ぶっちゃけどこでもいいです。
このexeを直接クリックするわけではないので、デスクトップにあると邪魔かも?
忘れない場所に置いてください。
他のサイトはSystem32に置けって書いてあるけど?
なんでかよくわからないんですが、ググったサイトは軒並みC:\Windows\System32に置けって書いてありました。
ただ、これあんまり意味ないと思うんですよねぇ。
System32とSysWOW64フォルダ
Windowsの64bitOSには
- C:\Windows\System32
- C:\Windows\SysWOW64
というフォルダがあります。
これ、名前がややこしいので間違えやすいのですが、
System32:
64bit用のファイルを入れる
SysWOW64:
32bit用のファイルを入れる
64bitOSで32bit用プログラムを動かすためのフォルダ
となってます。
最初に入れたWindows Resource Kitsは64bit非対応なので、入れるとしたらSysWOW64に入れるのが正解です。
System32に入れて実行するとどうなる?
64bit用のファイルとして実行します。
デスクトップに置いて実行したときも64bit用ファイルとして実行します。
どちらに置いても同じです。
もしWindows10 32bitOSで実行した場合はそもそもSystem32がないのですが、どこに置いても全部32bitで実行するのでこちらも問題ないはず(未確認)
権限の問題があるからSystem32のほうがいい?
影響があるかないかで言えば、あるような気がします。
デスクトップに置いた場合は処理できないプロセスがあるとかね。
ただ、権限ないとダメなプロセスをユーザーの一存で殺すのもどうかと思うんですよねぇ…。
それと、会社なんかだとSystem32にファイル置く権限がそもそもなかったりします。
(これで諦めた人も結構いそう)
実際にデスクトップに置いて試したところ動作することを確認していますので、
System32に置いてもいいけど置かなくてもいい
というのが私の結論です。
もし間違ってたら教えてください…。
メモリを開放してみる
empty.exeを任意の場所にコピーしたら、以下の方法で実行します。
Ctrl + Shift + Escキーを同時に押して、タスクマネージャーを表示しておくと効果がわかります。
実行するとこんな感じ。
家のPCはメモリ32GBあるのであまり変化がないように見えますが、8.8GB→5.2GBまで減ったのでかなり効果あると思います。
実行の仕方いろいろ
要はempty.exeにパラメータつけて実行すればOKです。
実行に必要なので、empty.exeのパスを取得しておきましょう。
ファイルをShift + 右クリック→パスのコピーが簡単。
手動で実行する
タスクバーの検索ボックスに、以下を入力してEnterするだけ。
1 2 |
// コピーしたパス+半角スペース+アスタリスク(*) "C:\Users\hazhikko\Desktop\empty.exe" * |
検索ボックスといいましたが、PowerShellでもCMDでも別のターミナルでもなんでもいいです。
自動で実行する
タスクスケジューラに登録すれば、定期的にメモリ解放を実行してくれます。
検索ボックスに「タスクスケジューラ」と入れて検索します。
基本タスクの作成をクリック。
タスクに任意の名前を付けます。
次へをクリック。
1回限りを選択して次へをクリック。
後で変更するので、ひとまず適当な日時を入れます。
次へをクリック。
プログラムの開始を選択して次へをクリック。
参照ボタンを押して、empty.exeを選択します。
引数の追加にアスタリスク(*)を入力し、次へをクリック。
問題がなければ完了をクリックします。
左カラムの「タスクスケジューラライブラリ」をクリックし、中央のタスク一覧から先ほど登録したタスクを探します。
タスクを右クリック→プロパティを開きます。
トリガータブをクリックし、編集ボタンをクリック。
設定で1回を選択。
詳細設定で以下を設定します。
繰り返し間隔:
1時間だと1時間に1回実行します。
継続時間:
無制限を選択します。
OKを押してダイアログを閉じると、設定した間隔でメモリ解放が実行されます。
他のプログラムから実行する
今やろうとしてるやつ。
C#の勉強ついでに、メモリ使用量が一定量を超えたら解放するようなのを作ろうと思ってます。
作ったらここに追記する予定。