2011-01-17 1 views
4

Я храню список с около 3000 объектов в Isolatedstorage с использованием сериализации Xml. Это займет слишком много времени, чтобы десериализовать это, и мне было интересно, есть ли у вас какие-либо рекомендации по его ускорению.Хранение большого списка в изолированных хранилищах на WP7

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

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

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

ответ

3

Заканчивать двоичный сериалайзер, который является частью 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>); 
} 
+0

очень полезно. Я использую двоичный режим, и он хорошо работает, thx –

3

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

Встроенные сериализаторы просто не будут достаточно быстрыми.

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

4

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

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

Windows Phone 7 Serialization: Comparison | eugenedotnet blog

WP7 Serialization Comparison

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

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

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

Phạm Tiểu Giao - Threads in WP7

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

Shawn Wildermuth - Architecting WP7 - Part 9 of 10: Threading

+0

Mick and Jeff, thx для вашего совета. я действительно не беспокоился о фоновом потоке, потому что ui в любом случае должен ждать загрузки файла и информации для показа. Это обходное решение и не ускоряет процесс imho. Кроме того, я прочитал статью (хорошо) Евгения, которая была хорошей информацией. Я проверю две другие ссылки. –

+0

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

Смежные вопросы