256MB デバイスの判定

 Mobile World Congress 2012 でメモリを 256MB しか搭載していない Windows Phone デバイスが発表されました(既存のデバイスは 512MB 搭載)。
 同時に Windows Phone SDK 7.1.1 Update CTP が公開されました。7.1.1での変更箇所については以下にまとめられています。
 What's New in the Windows Phone SDK 7.1.1 Update

 すぐに 256MB デバイスが発売されるわけではないですし、現時点では日本での発売予定はないようですが、今後全世界に向けて公開するアプリケーションを作成する場合は、256MB デバイスを考慮する必要があります。
 7.1.1には 256MB のエミュレータが含まれていますので、7.1.1をインストールして変更点等を確認をしてみたいと思います。

 なお、7.1.1は7.1に対するパッチとして提供されています。現時点では日本語版の7.1に対しては使用できません。
 今回は英語版の7.1をインストールして、7.1.1を適用しました。

判定方法

 ますは 既存のデバイスと 256MB デバイスの判定方法についてです。判定方法は以下に公開されています。
 How to: Disable Features of an Application for a 256-MB Device

 以下のように判定を組み込んで 512MB / 256MB のエミュレータでそれぞれ実行してみました。

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
    base.OnNavigatedTo(e);

    try
    {
        Int64 result = (Int64)DeviceExtendedProperties.GetValue("ApplicationWorkingSetLimit");
        if (result < 94371840L)
        {
            textLowMemory.Text += "Yes";
        }
        else
        {
            textLowMemory.Text += "No";
        }

        textWorkingSet.Text += result.ToString();
    }
    catch (ArgumentOutOfRangeException)
    {
        textLowMemory.Text += "No";
        textWorkingSet.Text += "---";
    }
}

512MB エミュレータでの実行結果

256MB エミュレータでの実行結果

 実行結果からわかるように ApplicationWorkingSetLimit で取得できる値に違いがあり、この値で判定ができています。
 切り分けが必要な機能を組み込む場合は、このような判定を行って処理を分ける事になります。

 なお、現在の 512MB デバイスでは ApplicationWorkingSetLimit は取得できず例外が発生します。試しに IS12T で実行してみましたが取得できていませんでした。
 256MB デバイス発売時期に合わせて、既存デバイスに対してもアップデートが行われると思います。