Существует ли ограничение размера в 16 КБ для Silverlight LocalSettings (IsolatedStorageSettings) - PullRequest
1 голос
/ 14 ноября 2010

Я пытаюсь сохранить всю свою модель представления в настройках IsolatedStorage. Он довольно большой, так как содержит много других виртуальных машин.

Когда я пытаюсь прочитать значение, оно выдает ошибку «Операция не разрешена для IsolatedStorageFileStream». Это похоже на красную сельдь, так как я не использую файлы, я использую класс IsolatedStorageSettings.

Я извлек файл __LocalSettings в моем локальном каталоге данных приложения, и он кажется обрезанным до 16 КБ (на полпути через имя элемента XML). Я подозреваю, что он имеет ограничение в 16 КБ, и поэтому при следующей загрузке класс IsolatedStorage видит его как недопустимый файл и выбрасывает соответствие (затем он сбрасывает его обратно в пустой файл).

Я просто хотел бы подтвердить, есть ли ограничение размера 16 КБ для всех ваших настроек при использовании IsolatedStorageSettings?

Некоторые способы обойти это - сериализовать его в виде файла и повторно его переформатировать вместо использования настроек или вообще не использовать этот подход (хранить меньше информации). У кого есть идея получше, пожалуйста, дайте мне знать?

Ответы [ 2 ]

2 голосов
/ 14 ноября 2010

IsolatedStorageFile.IncreaseQuotaTo - ваш друг.

Также рассмотрите различные методы класса IsolatedStorageFile.

См. Примеры здесь (см. раздел « Пример изменения квоты? ») и здесь .

Обновление

С другой стороны, возможно, попытайтесь увеличить размер файла настроек, установив адреса для внешних файлов, а не встраивая их в сам параметр, например, если у вас большой XML-файл, просто установите его значениеадрес и обработать событие файла настроек (я предполагаю, что это подкласс ApplicationSettingsBase).

1 голос
/ 14 ноября 2010

Ладно, после гораздо большего расследования и стягивания волос предел в 16 Кб, похоже, стал красной селедкой. Это может быть актуально, но реальная проблема - это проблема сериализации.

Кажется, здесь есть 2 проблемы, касающиеся сериализации сложных типов в IsolatedStorageSettings. Первый - упомянутый выше, где класс _LocalSettings усекается на 16k на полпути через элемент XML. Это вызывает исключение «Операция не разрешена для IsolatedStorageFileStream». Второй тип имеет меньший сложный тип - после изучения содержимого _LocalSettings он, кажется, записывает в него, но затем в СЛЕДУЮЩИЙ раз вы загружаете приложение первыми настройками. Сохранение стирает все существующие настройки (т. Е. Не загружает существующие и сохранить их). В результате настройки _LocalSettings снова сбрасываются (т. Е. ВСЕ ваши настройки не сохраняются).

Проблема заключалась в том, что один из моих базовых типов (кстати, MVVM Light ViewModelBase - подробнее об этом здесь ) не имеет общедоступного конструктора без параметров и, следовательно, не сериализуем (не было предупреждений об этом , он просто показал странное поведение выше).

Вы должны выйти из программы, чтобы это произошло - когда вы читаете настройку после такой записи, она работает нормально - я подозреваю, что Silverlight делает больше за кулисами после полного выхода. Если кто-нибудь может подтвердить это ??

Как только я сделал сериализуемый базовый класс, он снова заработал.

...