月例パッチで.NET Frameworkが更新されたら

月例パッチで.NET Frameworkが更新されると、しばらくの間mscorsvw.exeというプロセスがアイドル時に走るようになる。mscorsvw.exeは.NET Framework Optimization Serviceと呼ばれていて、.NET Frameworkバイトコードを実行形式にAOTコンパイルするためにある。AOTコンパイルしておくとアプリケーションの起動速度が速くなるし、アプリケーション間で.NET Frameworkの実行形式を共有できるようになる。

mscorsvw.exeはアイドル時にだけ走るので、使うときにしか電源を入れないノートPCだと終了まで何日もかかることがある。ノートPCの冷却ファンはプロセスが走り続けるとうるさくなるので、mscorsvw.exeが走っている間はアイドル時に冷却ファンがうるさくなる。これはわりとイラッとする。

これを解決する方法として、.NET Framework Blogでmscorsvw.exeを常時走らせるスクリプトが紹介されている。この7318.DrainNGenQueue.wsfを実行すると、コンソールウィンドウが表示されてmscorsvw.exeが常時実行されるようになり、コンパイルが終了するとウィンドウが閉じる。

このスクリプトはmscorsvw.exeにCPUコアを複数使わせるので、正味のコンパイル時間も普通にmscorsvw.exeを動かすときよりも短くなる。それでもそこそこ時間は掛かるが、だらだら実行されていつまでも終わらないよりはずっといい。