繁体   English   中英

WP7上的JSON序列化性能问题

[英]JSON serialization performance issue on WP7

我有一个约有的.JSON文件。 1.5MB大小包含大约1500个JSON对象,我想在我的应用程序启动时将其转换为域对象。

目前我在手机上的过程(不在我的开发PC上)需要大约23秒,这对我来说太慢了,并且迫使我将对象列表写入ApplicationSettings这样我每次加载应用程序时都不必这样做(只是第一次关闭),但即使这需要15多秒写入,16秒读取,所有这些都不够好。

我没有很多序列化经验,我真的不知道完成它的最快方法。

目前,我正在使用System.Runtime.Serialization命名空间与DataContractDataMember方法。

有关此类数据加载的任何关于性能的想法?

我发现Json.NET库的性能更高,并且有更好的标准json序列化器选项。

我在我的应用程序中遇到的一个性能问题是我的域对象实现了INotifyPropertyChanged,其代码支持将事件调度回UI线程。 由于反序列化代码填充了这些属性,我正在进行大量的线程编组,而不需要在那里。 在反序列化期间删除通知大大提高了性能。

更新:我使用的是Caliburn Micro,它具有PropertyChangedBase属性,可以关闭属性更改通知。 然后我添加了以下内容:

[OnDeserializing]
public void OnDeserializing(StreamingContext context)
{
    IsNotifying = false;
}

[OnDeserialized]
public void OnDeserialized(StreamingContext context)
{
    IsNotifying = true;
}

尝试使用免费的EQATEC Profiler for WP7分析您的应用程序。 真正的问题可能是一些完全出乎意料且容易修复的问题,比如INgelifyPropertyChanged-example Nigel提到的。

您可以使用应用程序设置快速射击自己。 问题是它们总是“批量”序列化/反序列化并加载到内存中,所以除非你的对象非常小,否则会导致内存和性能问题。

我仍然想知道需要1500个物体。 你真的需要1500个整个对象,如果是这样,为什么 - 最终手机向用户展示了一些东西,没有用户可以同时处理1500位信息。 他们只能处理所呈现的信息,不是吗? 那么您可以显示对象的可能部分,并等待以后加载其他部分吗? 例如,如果我有2000个联系人,我将永远不会加载2000个联系人。 我可能加载2000个名称,让用户过滤/排序名称,然后当他们选择一个名称加载联系人。

我建议将此序列化为隔离存储作为文件。 内置的JSON序列化程序在磁盘上占用的空间最小,性能也很好。

是一篇关于序列化的文章。 使用二进制或Json.Net。

存储/恢复到ApplicationSettings也将涉及序列化(非常确定它是Xml)所以我认为你不会比你看到的16秒更快。

无论deerializer有多好,移动那些数据都不会很快。 我的建议是看看为什么要存储那么多对象。 如果您无法减少需要存储的对象集,请将它们分解为逻辑组,以便您可以按需加载而不是预先加载。

您是否尝试过使用多个较小的文件并[并]并行序列化以查看是否会更快?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM