c# - WP7 上的 JSON 序列化性能问题

标签 c# silverlight performance windows-phone-7

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

目前,我在手机上(而不是在我的开发 PC 上)的进程大约需要 23 秒,这对我来说太慢了,并且迫使我将对象列表写入 ApplicationSettings,这样我就不会每次加载应用程序时都必须执行此操作(刚开始时),但即使这样也需要 15 多秒的写入时间和 16 秒的读取时间,所有这些都还不够好。

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

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

关于这种类型的数据加载的性能有什么想法吗?

最佳答案

我找到了 Json.NET库比标准 json 序列化程序具有更高的性能和更好的选项。

我在我的应用程序中遇到的一个性能问题是我的域对象使用代码实现了 INotifyPropertyChanged 以支持将事件分派(dispatch)回 UI 线程。由于反序列化代码填充了这些属性,我正在做很多不需要在那里的线程编码。在反序列化期间切断通知显着提高了性能。

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

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

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

关于c# - WP7 上的 JSON 序列化性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5098514/

相关文章:

c# - 通过 linq2sql 选择 n 随机行

foreach 中的 C# 语法不明确

silverlight - 如何在 Silverlight 中使用 MVVM 根据绑定(bind)到的数据更改 DataGrid 的单元格?

javascript - 解析日期格式的性能 [javascript]

c# - 为什么 C# 不支持类构造函数上的隐式泛型类型?

C# 空引用异常和 StreamReader

silverlight - 确保从您的网站下载网页内容而不是使用缓存临时 Internet 文件的最佳方法是什么?

ajax - 在 Ajax、Flex 和 Silverlight 之间进行选择

c++ - 当许多单元格同时可见时,QTableView 滚动缓慢

sql-server - 重构开销较大的 T-SQL 查询