2017-02-16 76 views
3

我们在应用程序中使用Newtonsoft.Json所有的地方,喜欢它!然而,我们最近要优化我们的应用程序的启动时间和测量各种事情,每当我们反序列化JSON一些是第一次,还有的800ms的以1秒一个巨大的滞后发现。如果我们使用JsonConver.DeserializeObject()或新的JsonSerializer(),这并不重要,但第一次总是显而易见的。Json.Net在第一次使用慢上Xamarin.Android

我在这里做了一个小的回购情况:https://github.com/monostefan/json.net_android_slow_start

有谁知道这是为什么这么慢上Xamarin.Android?是否有解决方法?

+0

你看过答案[这里](http://stackoverflow.com/questions/10089347/json-net-slow-serialization-and-deserialization)?尝试在发布模式下编译。 –

+0

还没有,但是如果我在发布模式下编译并不重要。首次反序列化某些东西仍然比后续调用要长。 –

+0

@StefanReinhard你有没有解决这个问题?我有同样的问题。谢谢。 – Kyle

回答

1

我高度怀疑这是线程同步的问题。

我有你的代码的一瞥。用await Task.Run()可能是ContextSynchronization没有完全发生。我会尝试很好的旧Task.Factory.StartNew

可否请您尝试以下。

await Task.Factory.StartNew(
        () => 
        { 
         **/* Perform the service/network call + deserialization here */** 
        } 

       ).ContinueWith(
        t => 
        { 
         //Any thing that you were trying to do in main thread context 
        }, TaskScheduler.FromCurrentSynchronizationContext() 
       ); 
0

尝试降级Json.NET版本到8.0.3。

我在你的项目https://github.com/monostefan/json.net_android_slow_start尝试版本8.0.3,并没有在所有帮助那里。但值得花费几分钟的时间来尝试,因为在我的项目中,降级版本通过首次使用Json.NET解决了性能问题。

对我来说,似乎是因为版本9.0.1 Json.NET的Xamarin.Android表现很烂,但Xamarin.iOS似乎并没有受到影响。这也适用于最新的Json.NET版本10.0.2。首先在Xamarin.Android中使用任何对象序列化/反序列化,但是对于相似类型对象的后续操作是快速的。在我目前的Xamarin.Android项目中,8.0.3版本没有首次性能损失。