Slow startup of xamarin app

后端 未结 4 1686
一整个雨季
一整个雨季 2021-02-09 06:02

We are developing a cross platform app on a PCL, but for the time being we are only using android devices for testing.
Our concern is that its taking about 6 to 8 seconds (d

4条回答
  •  不思量自难忘°
    2021-02-09 06:40

    First thing I would recommend is to not benchmark a debug build of your app, the code paths of the Mono runtime and Jit'd code are not the same as a release build, the use of shared runtimes, assembly sizes, etc, etc, etc. will all effect the startup and execution times.

    Here are examples of startup times of a "very large" aggressively tuned Android Forms-based app on high-end and low-end devices using an in-house benchmarker (conditionally compiled in, not injected, and using the OS's system clock).

    App Overview:

    • Xamarin.Forms v2.4.0.269-pre2
    • Mix of coded and XAML based Pages, Controls, etc...
    • XAML Compiler enabled
    • "Splash screen" disabled
      • A Theme-based splash on MainActivity will add:
        • 200+ milliseconds to startup times on a fast device,
        • 1-2 seconds on a device w/ slow flash access
      • Just do not use an Activity-based splash-screen ;-)
    • Multi-dex'd
    • Proguard'd (aggressively reduced jars via UI testing w/ auto-feedback loop)
    • Linker (Link All, aggressively reduced assembly sizes with a custom link description file generated via UI testing w/ auto-feedback)
    • 100% source-built to allow collapsing namespaces and assembly reduction
    • Viper architecture w/ no 3rd-party DI/IoC
    • Lazy-loaded design using data, resource ad network priority queues
    • Realm live objects and queries used for all data (DB min. size: 250MB, max. size 1.2GB)

    Times are generated via a shell script that reboots the devices, monitors the startup to wait for the system to settle, launches a series of apps (GApps, Facebook, Instagram, Twitter, etc...), waits for the system to settle, and then launches the Forms app via:

    export deviceTime=$(echo "$(adb -s $deviceID shell cat /proc/uptime | awk '{print $1}') * 1000" | bc -l)
    adb -s $deviceID shell am start -n com.sushihangover.GeneticCancerDNAMapper/com.sushihangover.GeneticCancerDNAMapper.DevOpsDashboard --el startTime ${deviceTime%.*}
    

    Google Pixel (Oreo-based) device (app is usable in ~430ms):

    I GeneticCancerDNAMapper: 0.162 : Xamarin.Forms.Platform.Android.FormsAppCompatActivity.OnCreate
    I GeneticCancerDNAMapper: 0.164 : Xamarin.Forms.Platform.Android.FormsAppCompatActivity.base.SetTheme
    I GeneticCancerDNAMapper: 0.201 : Xamarin.Forms.Platform.Android.FormsAppCompatActivity.base.OnCreate
    I GeneticCancerDNAMapper: 0.244 : Xamarin.Forms.Forms.Init
    I GeneticCancerDNAMapper: 0.266 : Realms.Realm.GetInstanceAsync ~Get Instance & Data~
    I GeneticCancerDNAMapper: 0.324 : Realms.Realm.GetInstanceAsync ~Obtained Instance & Data~
    I GeneticCancerDNAMapper: 0.324 : Xamarin.Forms.Application Content
    I GeneticCancerDNAMapper: 0.349 : Xamarin.Forms.Application Content ~Creation Completed~
    I GeneticCancerDNAMapper: 0.353 : Xamarin.Forms.Application.MainPage ~Displayed~
    I GeneticCancerDNAMapper: 0.43 : Xamarin.Forms.Platform.Android.FormsAppCompatActivity.LoadApplication
    

    Low-end "Android One" 512MB device w/ very slow flash (app is usable in ~4.5s):

    Re: https://en.wikipedia.org/wiki/Android_One

    I/GeneticCancerDNAMapper(10904): 2.453 : Xamarin.Forms.Platform.Android.FormsAppCompatActivity.OnCreate
    I/GeneticCancerDNAMapper(10904): 2.467 : Xamarin.Forms.Platform.Android.FormsAppCompatActivity.base.SetTheme
    I/GeneticCancerDNAMapper(10904): 2.731 : Xamarin.Forms.Platform.Android.FormsAppCompatActivity.base.OnCreate
    I/GeneticCancerDNAMapper(10904): 3.016 : Xamarin.Forms.Forms.Init
    I/GeneticCancerDNAMapper(10904): 3.166 : Realms.Realm.GetInstanceAsync ~Get Instance & Data~
    I/GeneticCancerDNAMapper(10904): 3.571 : Realms.Realm.GetInstanceAsync ~Obtained Instance & Data~
    I/GeneticCancerDNAMapper(10904): 3.571 : Xamarin.Forms.Application Content
    I/GeneticCancerDNAMapper(10904): 3.772 : Xamarin.Forms.Application Content ~Creation Completed~
    I/GeneticCancerDNAMapper(10904): 3.799 : Xamarin.Forms.Application.MainPage ~Displayed~
    I/GeneticCancerDNAMapper(10904): 4.457 : Xamarin.Forms.Platform.Android.FormsAppCompatActivity.LoadApplication
    

提交回复
热议问题