Visual Studio 2015でWindows Phoneのエミュレーター(Mobile Emulator)を動かそうとしたら、バーチャルマシンのメモリー不足(Not enough memory)というエラーになり苦労したので、対処方法の備忘録です。
経緯
Visual Studio Community 2015 で UWP(Universal Windows Platform)アプリをつくってみようと思い立ち、まずはWindows Phone(Windows 10 Mobile か?)のエミュレーターが動くのか見てみました。ところが、メモリー不足と思われるエラーが発生して、エミュレーターが立ち上がりません。
タスクマネージャーでは512MBのリソースは余裕で余っているのですが。。
「ほかのアプリを閉じても同じ問題が発生する場合は、ここを見てね」と書いてあるので、ナレッジベースを見てみます。英語ぢゃん。。
環境
確認、実行した環境は以下です。
- OS: Windows 10 Pro
- CPU: Intel Core i7-3517U 1.90-2.40GHz x64
- RAM: 4GB(ただし、一部にVRAMが同居)
- 開発環境: Visual Studio2015 Community 2015
ということで、SLAT(Second Level Address Translation)には対応しています。Hyper-Vは元気です。チェックツールでも問題なしになりました。
結論
新しいレジストリキーに仮想マシンのメモリーを明示的に確保して解決です。
言わずもがなですが、レジストリの変更は自己責任です。
手順
バーチャルマシンのメモリーを明示的に確保するため、レジストリ値を追加します。
「MemoryReserve」を新規作成して値を設定する手順です。
- レジストリエディタを起動
呪文: regedit - 変更するレジストリキー
【注意: レジストリ変更前には必ずバックアップすること(ファイル → エクスポート)】
HKEY_LOCAL_MACHINE
├ SOFTWARE
│├ Microsoft
││├ Windows NT
│││├ CurrentVersion
││││├ Virtualization - Virtualizationで 右クリック → 新規 → DWORD(32ビット)値 とクリック
- 名前を「MemoryReserve」としてEnter
- 「MemoryReserve」をダブルクリックし、値のデータに「2048」と入力し、表記のラジオボタンで「10進数」を選択してOKをクリック
- レジストリエディタを閉じる
なお、レジストリ情報を反映させるには、コンピューターの再起動が必要です。
ちなみにMemoryReserveは、メモリーが8BG未満のコンピューターの場合、2048(2GB)が推奨値。ここに「0」を設定すると無視される、とのことです。
変更後
しっかりエミュレーターが動きました。
WVGA 4 inch 512MBです。
やっぱりどう見てもメモリーは余裕なのですよねw
タスクマネージャーで見ているとわかりやすいです。
エラーの原因
わかりません。。
ナレッジベースに書いてあること
せっかくなので、Bingに翻訳してもらいました。
オペレーティング システムは、一貫して高いパフォーマンスを維持するためにメモリを割り当てる方法について Windows 8 のバージョンよりもより保守的なので、Windows 8.1 ではこの問題が発生します。Windows 8.1 では、Hyper-V のメモリ管理は任意のエミュレーターのインスタンスを起動する前に、プログラムによって消費されるメモリを占めています。ハイパー-V は Windows 8 でこの意識をしていません。
予想
たぶん、実体OSのパフォーマンスを優先するために、仮想マシンのメモリー管理がざっくりになっているから、エミュレーターに割く分を明示してあげればうまくいくということなのかと。
ここまで読んでくださりありがとうございます。
コメント