代码之家  ›  专栏  ›  技术社区  ›  Rodney

Silverlight LocalSettings(IsolatedStorageSettings)的大小限制是16k吗

  •  1
  • Rodney  · 技术社区  · 14 年前

    我正试图将我的整个视图模型保存到IsolatedStorage设置中。它相当大,因为它包含许多其他vm。

    当我尝试读取该值时,它抛出一个“不允许对IsolatedStorageFileStream执行操作”错误。这看起来像是在转移话题,因为我没有使用文件,而是使用IsolatedStorageSettings类。

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

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

    解决这个问题的一些方法是将它序列化为一个文件并重新水化它,而不是使用设置,或者根本不使用这种方法(存储更少的信息)。有谁有更好的主意请告诉我?

    2 回复  |  直到 14 年前
        1
  •  2
  •   Shimmy Weitzhandler TimothyP    14 年前

    IsolatedStorageFile.IncreaseQuotaTo 是你的朋友。

    还回顾了 IsolatedStorageFile 上课。

    参见示例 here (见“ 如何修改配额示例? “节)和 here .

    更新

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

        2
  •  1
  •   Rodney    14 年前

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

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

    问题是我的一个基本类型(顺便说一下MVVM Light ViewModelBase- read more about this here )没有公共的无参数构造函数,因此不可序列化(对此没有任何警告,它只是显示了上面的奇怪行为)。

    你必须退出程序来实现这一点——当你在这样的写之后读设置时,它工作得很好。我怀疑Silverlight在完全退出之后会做更多的幕后操作。如果有人能证实??

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