VisualStudioでWindowsPhoneのエミュレーターがメモリー不足で苦労した

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」を新規作成して値を設定する手順です。

  1. レジストリエディタを起動
    呪文: regedit
  2. 変更するレジストリキー
    注意: レジストリ変更前には必ずバックアップすること(ファイル → エクスポート)】
    HKEY_LOCAL_MACHINE
    ├ SOFTWARE
    │├ Microsoft
    ││├ Windows NT
    │││├ CurrentVersion
    ││││├ Virtualization
  3. Virtualizationで 右クリック → 新規 → DWORD(32ビット)値 とクリック
  4. 名前を「MemoryReserve」としてEnter
  5. 「MemoryReserve」をダブルクリックし、値のデータに「2048」と入力し、表記のラジオボタンで「10進数」を選択してOKをクリック
    レジストリ値
  6. レジストリエディタを閉じる

なお、レジストリ情報を反映させるには、コンピューターの再起動が必要です。

ちなみに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のパフォーマンスを優先するために、仮想マシンのメモリー管理がざっくりになっているから、エミュレーターに割く分を明示してあげればうまくいくということなのかと。

ここまで読んでくださりありがとうございます。

コメント

タイトルとURLをコピーしました