Разница между LocalSettings и IsolatedStorageSettings
Я создаю приложение для Windows Phone 8.1 Silverlight. Я могу использовать оба следующих реестра:
Windows.Storage.ApplicationData.Current.LocalSettings;
IsolatedStorageSettings.ApplicationSettings;
- Каковы различия между этими двумя?
- Какой из них лучше?
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.