JSON.NET在Xamarin.android上首次使用时慢



我们在应用程序中使用newtonsoft.json并喜欢它!但是,我们最近想优化我们的应用启动时间,并通过测量各种事物来发现,每当我们首次对某些JSON进行测量,大约有800ms至1s的滞后。无论我们使用jsonconver.deserializeobject()还是新的jsonserializer(),这并不重要

我在这里制作了一个小的回购案例:https://github.com/monostefan/json.net_android_slow_start

有人知道为什么在xamarin.android上这么慢吗?并且可能有解决方法吗?

我们的一位用户正在遇到此问题,并通过在单独的线程中进行反序列化来解决它:https://forums.xamarin.com/discussion/comment/comment/comment/comment/comment/comment/comment/comment/comment/comment/comment/comment/comment/comment/comment/comment/comment/comment/comment/comment/comment/comment/comment/comment/comment/#remand_272208

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

我瞥见了您的代码。使用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()
               );

尝试将JSON.NET版本降级为8.0.3。

我在您的项目中尝试了版本8.0.3 https://github.com/monostefan/json.net_android_slow_start,并且在那里完全没有帮助。但是,值得花几分钟来尝试一下,因为在我的项目中,降级版本解决了json.net的性能问题。

对我来说,JSON.NET的Xamarin.android性能从版本9.0.1开始很烂,但是Xamarin.ios似乎没有受到影响。这也适用于最新的JSON.NET版本10.0.2。首先在Xamarin中的任何对象序列化/避难所中使用。ANDROID不可接受的缓慢,但是类似类型的对象的随后操作很快。8.0.3版在我当前的Xamarin.android项目上没有第一次绩效罚款。

对我来说,在xamarin.android中看起来不正确。如Lirkki所建议的那样,降级到8.0.3有助于减少延迟,但不能解决问题。

我为解决这个问题所做的解决问题是立即调用一个假人deserializeObject调用,当程序加载到单独的线程中(正如他人所建议的),然后当我四处使用它来实现它时,第一个虚拟电话完成了,延迟消失了。例如:

task.factory.startnew(()=> {var o = jsonconvert.deserializeObject&ltdummyjsonObject&gt(dummyjson);}); 

这可能不是解决此问题的最佳方法。

相关内容

  • 没有找到相关文章

最新更新