1

我正在尝试将我的整个视图模型保存到独立存储设置中。它非常大,因为它包含许多其他 VM。

当我尝试读取该值时,它会引发“IsolatedStorageFileStream 上不允许操作”错误。这似乎是一个红鲱鱼,因为我没有使用文件,我使用的是 IsolatedStorageSettings 类。

我检查了本地应用程序数据目录下的 __LocalSettings 文件,它似乎在 16k 处被截断(通过 XML 元素名称的一半)。我怀疑它有 16k 的限制,因此在下一次加载时,IsolatedStorage 类将其视为无效文件并抛出一个合适的文件(然后将其清空为空文件)。

我想确认在使用 IsolatedStorageSettings 时,您的所有设置是否有 16k 的大小限制?

解决它的一些方法是将其序列化为文件并重新水化它而不是使用设置或根本不使用这种方法(存储更少的信息)。在任何人有更好的想法请告诉我?

4

2 回答 2

2

IsolatedStorageFile.IncreaseQuotaTo是你的朋友。

还要复习IsolatedStorageFile课堂上的各种方法。

请参阅此处的示例(请参阅“如何修改配额的示例? ”部分)和此处

更新

另一方面,可以尝试通过将地址设置为外部文件而不是将它们嵌入设置本身来增加设置文件的大小,例如,如果您有一个很大的 xml 文件,只需将设置设置为其地址并处理设置文件的事件(我假设它是 的子类ApplicationSettingsBase)。

于 2010-11-14T03:21:41.993 回答
1

好的,经过更多的调查和拉扯 16k 的限制似乎是一个红鲱鱼。这可能是相关的,但实际问题是序列化问题。

这里似乎有 2 个关于将复杂类型序列化为 IsolatedStorageSettings 的问题。第一个是上面提到的 _LocalSettings 类在 XML 元素中途被截断的 16k 处。这会导致“IsolatedStorageFileStream 上不允许操作”异常。第二个是较小的复杂类型 - 在检查 _LocalSettings 的内容之后,它似乎会写入它,但是在下一次加载应用程序时,第一个 Settings.Save 会擦除所有现有设置(即它不会加载现有的并重新保存它们)。这会使 _LocalSettings 再次重置为空白(即,您的所有设置都不会保留)。

问题是我的一种基本类型(顺便说一下 MVVM Light ViewModelBase -在此处阅读更多信息)没有公共无参数构造函数,因此不可序列化(对此没有警告,它只是表现出上面的奇怪行为) .

您必须退出程序才能发生这种情况 - 当您在这样的写入后读取设置时它工作正常 - 我怀疑 Silverlight 在您完全退出后在幕后做更多事情。如果有人可以证实这一点?

一旦我使基类可序列化,它就会再次工作。

于 2010-11-14T20:36:28.853 回答