Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当我们可以直接使用IsolatedStorageSettings.ApplicationSettings进行序列化/反序列化时,为什么要使用序列化/反序列化函数?_C#_Silverlight_Windows Phone 7 - Fatal编程技术网

C# 当我们可以直接使用IsolatedStorageSettings.ApplicationSettings进行序列化/反序列化时,为什么要使用序列化/反序列化函数?

C# 当我们可以直接使用IsolatedStorageSettings.ApplicationSettings进行序列化/反序列化时,为什么要使用序列化/反序列化函数?,c#,silverlight,windows-phone-7,C#,Silverlight,Windows Phone 7,在Windows phone中,我们可以使用 IsolatedStorageSettings.ApplicationSettings.Add("foo", bar); IsolatedStorageSettings.ApplicationSettings["foo"] 那为什么人们使用“sharpSerializer”之类的东西呢 在我的头顶上: IsolatedStorage设置的访问和保存速度通常比IsolatedStorage文件慢 您不能在设置中保存null,但可以创建自己

在Windows phone中,我们可以使用

   IsolatedStorageSettings.ApplicationSettings.Add("foo", bar);
   IsolatedStorageSettings.ApplicationSettings["foo"]

那为什么人们使用“sharpSerializer”之类的东西呢

在我的头顶上:

IsolatedStorage设置的访问和保存速度通常比IsolatedStorage文件慢

您不能在设置中保存null,但可以创建自己的序列化表示形式

使用目录可以使处理大量文件比在“设置”中为对象的键要求长或复杂的命名约定容易得多

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


我怀疑添加到设置中的对象仍然以某种方式(在后台)序列化—我猜是二进制序列化—因为它们需要持久化到磁盘。通过定义您自己的serializiaton,您可以确保它能够正常工作。如果你仅仅依靠系统来完成这项工作,你最终可能会出现意想不到的行为。如果您有自己的序列化,您还可以保证将来和跨平台的兼容性。(如果这是一个问题。)

在应用程序设置中存储对象的最大问题是设置的全部内容被序列化和反序列化在一起


只要您只访问一个设置,all设置就会被反序列化并加载到支持应用程序设置的
字典中。因此,存储大量设置或存储需要大量序列化的大型对象不是一个好选择。

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


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

另一个重要的问题是,其他人没有提到,当您通过向市场提交更新版本来更新应用程序时,整个应用程序设置都会被删除,假设新应用程序将设置自己的默认值。因此,最好将数据序列化到IsolatedStorage中,而不是填充应用程序设置。

DataContractSerializer用于序列化整个内部
字典
@AnthonyWJones,这将导致性能问题;)