Разница между LocalSettings и IsolatedStorageSettings

Я создаю приложение для Windows Phone 8.1 Silverlight. Я могу использовать оба следующих реестра:

Windows.Storage.ApplicationData.Current.LocalSettings;

IsolatedStorageSettings.ApplicationSettings;
  1. Каковы различия между этими двумя?
  2. Какой из них лучше?

2 ответа

Решение

Разница между Windows.Storage.ApplicationData.Current.LocalSettings а также IsolatedStorageSettings.ApplicationSettingsв том, что первый - это более новый унифицированный API-интерфейс Магазина Windows, а последний - из "старого" API-интерфейса Silverlight.

Новое не всегда лучше, но я лично думаю, что вы должны пойти с современной версией здесь. Оба работают с Silverlight, но если вам когда-нибудь придется перенести свой код в WinRT, вы сэкономите некоторое время, так как IsolatedStorageSettings API не работает под WinRT.

Существует огромная разница в использовании обеих настроек:

  • IsolatedStorageSettings работает как словарь, сериализуется и сохраняется в IsolatedStorageFile:

    IsolatedStorageSettings предоставляют удобный способ хранения пользовательских данных в виде пар ключ-значение в локальном файле IsolatedStorageFile.

    Также обратите внимание, что IsolatedStorageSettings должен быть сохранен - IsolatedStorageSettings.Save. После сохранения вы найдете файл __ApplicationSettings в изолированном хранилище вашего приложения.

  • ApplicationData.LocalSettings является ApplicationDataContainer. Как только вы добавляете туда значение, оно автоматически сохраняется. Эта модель концептуально эквивалентна реестру Windows.

Таким образом, они совершенно разные вещи, и если вы добавите ключ к одному из указанных выше параметров, он не появится автоматически через секунду. Рассмотрим две кнопки:

const string firstKey = "firstKey";
const string secondKey = "secondKey";
IsolatedStorageSettings isoSetting = IsolatedStorageSettings.ApplicationSettings;
ApplicationDataContainer localSetting = ApplicationData.Current.LocalSettings;

private void Button_Click(object sender, RoutedEventArgs e)
{
    isoSetting.Add(firstKey, true);
    localSetting.Values[secondKey] = false;
    //isoSetting.Save(); // IsolatedStorageSettings have to be saved

    Debug.WriteLine("Is first key in LocalSettings: {0}", localSetting.Values.ContainsKey(firstKey));
    Debug.WriteLine("Is first key in ApplicationSettings: {0}", isoSetting.Contains(firstKey));
    Debug.WriteLine("Is second key in LocalSettings: {0}", localSetting.Values.ContainsKey(secondKey));
    Debug.WriteLine("Is second key in ApplicationSettings: {0}", isoSetting.Contains(secondKey));
}

private void Button_Click2(object sender, RoutedEventArgs e)
{
    // run this button after app restart without clicking first button
    // and saving IsoSettings
    Debug.WriteLine("Is first key in LocalSettings: {0}", localSetting.Values.ContainsKey(firstKey));
    Debug.WriteLine("Is first key in ApplicationSettings: {0}", isoSetting.Contains(firstKey));
    Debug.WriteLine("Is second key in LocalSettings: {0}", localSetting.Values.ContainsKey(secondKey));
    Debug.WriteLine("Is second key in ApplicationSettings: {0}", isoSetting.Contains(secondKey));
}

Если бы я писал новое приложение, то использовал бы новый API ApplicationData.LocalSettings - он более новый, и в будущем будет гораздо проще перенести такое приложение в RunTime, так как WP8.1 RT не поддерживает IsolatedStorageSettings.

Другие вопросы по тегам