当我们可以使用Isolated Storage Settings.ApplicationSettings直接执行时,为什么要使用序列化/反序列化功能?

时间:2011-02-14 11:10:52

标签: c# silverlight windows-phone-7

在Windows手机中,我们可以使用

存储和检索任何内容
   IsolatedStorageSettings.ApplicationSettings.Add("foo", bar);
   IsolatedStorageSettings.ApplicationSettings["foo"]

那为什么人们会使用“sharpSerializer”这类东西呢?

4 个答案:

答案 0 :(得分:4)

将对象存储在ApplicationSettings中的一个大问题是设置的所有内容都被序列化和反序列化。

只要您访问一个设置,所有设置就会反序列化并加载到支持ApplicationSettings的Dictionary<string, object>中。因此,它不是存储大量设置或存储需要大量序列化的大型对象的好选择。

答案 1 :(得分:4)

设置是一个具有键/值对的扁平组织。对于没有问题的简单对象,但如果您拥有丰富的集合并且不希望仅仅为了获取元素而反序列化列表的开销,则设置可能会有问题。它们还要求元素可序列化,而使用隔离的存储文件系统,您可以控制序列化并序列化任何内容。此外,您可以选择序列化策略,例如二进制,JSON,XML或其他。最后,设置序列化对象的效率有限。我不确定它是什么,因为它没有发布,但不止一个开发人员告诉我更大的对象或大量的对象开始表现不正常,在设置中抛出异常或不能正确保持。

PS - 此外,由于您提到了Windows Phone 7,因此设置有限制,而文件系统没有配额。

答案 2 :(得分:0)

脱离我的头顶:

IsolatedStorageSettings通常比IsolatedStorage文件访问和保存更慢。

您无法在“设置”中保存null,但您可以创建自己的序列化表示形式。

使用目录可以比使用设置中对象的键的长或复杂命名约定更容易处理大量文件。

在某些情况下,您可能希望引用存储在IsolatedStorage中的对象。如果将其保存在设置中,则无法执行此操作。

我怀疑添加到Settings的对象仍然以某种方式序列化(在后台) - 我的猜测是二进制序列化 - 因为它们需要持久保存到磁盘。通过定义您自己的序列化,您可以确保这将正常/按预期工作。如果你只是依靠系统来做到这一点,你可能会遇到意想不到的行为。如果您有自己的序列化,那么您对未来和跨平台兼容性也有一些保证。 (如果这是一个问题。)

答案 3 :(得分:0)

另一个没有提及的重要一点是,当您通过向市场提交更新版本来更新应用程序时,整个ApplicationSettings将被删除,因为假设新应用程序将具有自己的默认设置。因此,将数据序列化到IsolatedStorage并且不要填充AppSettings总是一个好主意。