Хранение большого списка в изолированном хранилище на WP7 - PullRequest
4 голосов
/ 17 января 2011

Я храню список с примерно 3000 объектами в Isolatedstorage, используя сериализацию Xml. Процесс десериализации занимает слишком много времени, и мне было интересно, есть ли у вас какие-либо рекомендации по его ускорению.

Время допустимо для десериализации до 500 объектов, но для десериализации 3000 понадобится вечность. Это займет больше времени только на эмуляторе и будет быстрее на телефоне?

Я провел целую кучу поисков, и в какой-то статье говорилось, что используется бинарный потоковый ридер, но я не могу его найти. Неважно, сохраняю ли я данные в двоичном формате или в формате xml, я просто хочу сохранить список.

Я пока не хочу смотреть на асинхронную загрузку ...

Ответы [ 3 ]

4 голосов
/ 18 января 2011

Во-первых, здесь уже есть хорошая информация, поэтому +1 там.

Я бы порекомендовал ознакомиться с этими статьями, чтобы получить представление о том, какую производительность вы можете ожидать, используя различные готовые методы сериализации.

Сериализация Windows Phone 7: Сравнение | Блог eugenedotnet

Сравнение сериализации WP7

Вы также можете рассмотреть возможность использования нескольких файлов, если вам не нужно постоянно загружать и записывать все одним ударом.

Я бы повторил совет Джеффа, что было бы неплохо перенести любую существенную работу, оставшуюся после этого, в фоновый поток, чтобы не ухудшать взаимодействие с пользователем.

Это довольно просто. Вот пошаговое руководство, которое я часто рекомендую, и люди находят сжатым и полезным.

Phạm Tiểu Giao - темы в WP7

А также это, недавно Шон Вильдермут, который тоже выглядит неплохо.

Шон Вильдермут - Архитектура WP7 - Часть 9 из 10: Резьба

3 голосов
/ 18 января 2011

Проверьте двоичный сериализатор, который является частью sharpSerializer: http://www.sharpserializer.com/en/index.html

Это очень просто и работает очень хорошо.

Вот блог, в котором говорится об использовании его в WP7: http://www.eugenedotnet.com/2010/12/windows-phone-7-serialization-sharpserializer/

Я использую его как (рассмотрим этот psuedocode и использую функции, перечисленные в eugenedotnet)

в App.xaml.cs:

Application_Dectivated()
{
     IsolatedStorageFileStream stream = store.OpenFile(fileName, FileMode.OpenOrCreate);
     Serialize(stream,(obj)MyHugeList<myObject>);
}

Application_Activated()
{
     IsolatedStorageFileStream stream = store.OpenFile(fileName, FileMode.Open);
     Deserialize(stream,(obj)MyHugeList<myObject>);
}
3 голосов
/ 18 января 2011

Для такого количества предметов вам нужно создать свою оптимизированную историю сериализации.Я вижу, что многие люди используют простые CSV и текстовые форматы для этого.

Встроенные сериализаторы просто не будут достаточно быстрыми.Фоновая тема по многим причинам, хотя вы указали, что не хотите этого делать.

...