Windows Sandbox のフレームレートとかを上げる

Windows のサンドボックス環境、Windows Sandbox (そのままですね) がある。クリーンな環境でアプリの動作テストをしたいときとかに便利だ。
ただ、使ってみると違和感を持つのが画面のモタつき感で、ブラウザで UFO Test を立ち上げてみると分かるのだが 30 FPS 程度しか出ていない。これをなんとかできないのだろうか。
Windows Sandbox は RDP だった! レジストリの変更でフレームレートを上げられる
先にバラしておくと、Windows Sandbox のウィンドウは、リモートデスクトップと同じプロトコル (RDP) で実現している。これはタスクマネージャーなどからそういうプロセスが見つかるので分かる。これによりフレームレートが 30 FPS と低い値になっているのにも説明がつく。
Windows Sandbox の設定ファイル .wsb
ファイルを作成する。既にファイルがあるなら、追記で OK。下記の内容で設定する。
<Configuration>
<LogonCommand>
<Command>reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations" /v DWMFRAMEINTERVAL /t "REG_DWORD" /d "0xf" /f</Command>
</LogonCommand>
</Configuration>
これにより、サンドボックスの起動時に、フレームレートが 60 FPS になるレジストリを追加するコマンドが実行される。設定ファイルを開くとサンドボックスが起動する。しかし、現時点ではフレームレートは上がっていない。このコマンドはログオン後に実行されるので、たぶんリモートデスクトップの接続に間に合っていないと考えられる。そこで、起動したらすぐに「再起動」をする。Windows 11 22H2 以降の Windows Sandbox は、再起動の場合に限ってデータが破棄されないので、レジストリを変更も反映されるようになった。
少し待つと再起動が終わって、フレームレートが上がっている状態になる。この状態で UFO Test を実行すると 65、66 FPS にまで向上した。
BetterRDP などの設定はあまり効果がなかった
レジストリ 1 つを追加するだけでフレームレートを改善することができた。ただ、BetterRDP のようなリモートデスクトップの動作を改善するその他のレジストリを設定しても変化がなかった (もしくは、効果がわずかだった)。
まあ、念のため設定しておくのも良いかもしれない。しかし僕の環境では AVCHardwareEncodePreferred
(ハードウェアエンコードの有効化) オプションだけオンにすると再起動の時上手く通信できなくなるようなので注意。