2010-11-14 46 views
1

我试图将整个viewmodel保存到IsolatedStorage设置中。它很大,因为它包含许多其他虚拟机。是否有Silverlight LocalSettings(IsolatedStorageSettings)的大小限制为16k

当我尝试读取值时,会抛出“IsolatedStorageFileStream不允许操作”错误。这看起来像一个红鲱鱼,因为我没有使用文件,我正在使用IsolatedStorageSettings类。

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

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

其中一些方法是将其序列化为文件并对其进行补充而不是使用设置,或者根本不使用此方法(存储较少信息)。在任何人有更好的主意,请让我知道?

+0

请注意,Debug.WriteLine是有限的,因此截断可能来自于此。通过NewLine分成一个数组,并分别写入数据。 – 2011-12-05 13:21:21

回答

1

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

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

的问题是,我的基本类型之一(捎带着MVVM光ViewModelBase - read more about this here)不具有公共paramaterless构造,因此不序列化(有没有这方面的警告,它只是表现出上面的奇怪行为) 。

您必须退出程序才能实现此目的 - 当您在这样写入后阅读设置时,它可以正常工作 - 我怀疑在完全退出后Silverlight会在幕后执行更多操作。如果有人可以证实这一点??

只要我使基类可串行化,那么它再次工作。

2

IsolatedStorageFile.IncreaseQuotaTo是你的朋友。

另请参阅IsolatedStorageFile类的各种方法。

见的例子here(见“样品关于如何修改配额?”一节)和here

更新

在另一方面,也许试图通过地址设置到外部文件,而不是在设置本身嵌入它们,例如增加了设置文件的大小,如果你有一个大的XML文件,只需将设置设置为其地址并处理设置文件的事件(我认为它是ApplicationSettingsBase的子类)。

+0

嗯 - 我不认为这是问题。 _LocalSettings文件打到16k,而默认情况下IS获得1兆(我的课程可能是猜测100k,它只是文本信息)。我抛出了IsolatedStorageFile.AvailableFreeSpace并有1兆免费。我怀疑IsolatedStorageSettings在读取/写入文件到IS时的功能不同。我真的需要知道LocalSettings是否被限制为16k,因为这是我的截断文件的大小。基本上,当我尝试写一个小设置的时候,它可以工作,但是当我尝试并保存大设置时,它会在16k时崩溃。谢谢 – Rodney 2010-11-14 03:47:27

+0

我已经更新了我的答案。 – Shimmy 2010-11-14 05:25:48

相关问题