Notice (2018-05-24): bugzilla.xamarin.com is now in
Please join us on
Visual Studio Developer Community and in the
Mono organizations on
GitHub to continue tracking issues. Bugzilla will remain
available for reference in read-only mode. We will continue to work
on open Bugzilla bugs, copy them to the new locations
as needed for follow-up, and add the new items under Related
Our sincere thanks to everyone who has contributed on this bug
tracker over the years. Thanks also for your understanding as we
make these adjustments and improvements for the future.
Please create a new report on
Developer Community or GitHub with
your current version information, steps to reproduce, and relevant error
messages or log files if you are hitting an issue that looks similar to
this resolved bug and you do not yet see a matching new report.
Created attachment 16643 [details]
A customer is developing an app and noticing that the time to launch a brand new (from template) app is taking ~3 seconds to launch. Ideally, they want to hit iOS recommendations of ~300ms. Instruments shows 840ms (larger chunk of time) spent in `CFRunLoopRunSpecific`.
**Steps to Reproduce:**
1. Attached is the template project.
2. Deploy the app in Release mode to a device.
3. Make sure the app is closed.
4. Tap the icon on the device to launch the app
Customer notices that the time from launch screen appearing, to first view controller is ~3 seconds.
Time from launch screen appearing to first view controller ~300ms
**Build Date & Platform:**
=== Xamarin Studio Enterprise ===
Version 6.1 (build 5099)
Installation UUID: e01c3049-a2d2-4e0a-aad8-afe6fb627c4d
Mono 4.4.0 (mono-4.4.0-branch/fcf7a6d) (64-bit)
GTK+ 2.24.23 (Raleigh theme)
Package version: 404000148
=== NuGet ===
=== Xamarin.Profiler ===
=== Xamarin.Android ===
Version: 188.8.131.52 (Xamarin Enterprise)
Android SDK: /Users/johnmiller/Library/Developer/Xamarin/android-sdk-macosx
Supported Android versions:
2.3 (API level 10)
4.0.3 (API level 15)
4.1 (API level 16)
4.2 (API level 17)
4.4 (API level 19)
5.0 (API level 21)
5.1 (API level 22)
6.0 (API level 23)
SDK Tools Version: 25.1.2
SDK Platform Tools Version: 24.0.0
SDK Build Tools Version: 23.0.2
Java SDK: /usr
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)
Android Designer EPL code available here:
=== Xamarin Android Player ===
Location: /Applications/Xamarin Android Player.app
=== Apple Developer Tools ===
Xcode 7.3 (10183.3)
=== Xamarin.Mac ===
Version: 184.108.40.206 (Xamarin Enterprise)
=== Xamarin.iOS ===
Version: 220.127.116.11 (Xamarin Enterprise)
Build date: 2016-06-20 16:09:58-0400
=== Xamarin Inspector ===
Build date: Thu May 12 22:20:04 UTC 2016
=== Build Information ===
Release ID: 601005099
Git revision: 90cd5b624ae09ab03666482981e30822caa7372e
Build date: 2016-07-01 10:03:50-04
Xamarin addins: d48fe7620678a6edeb3d23caad0b8b288a07e0c9
Build lane: monodevelop-lion-master
=== Operating System ===
Mac OS X 10.11.2
I was not able to reproduce this with my iPhone 6s. The customer is testing with a 5s.
I noticed that Debug builds take about 3 seconds given the steps to reproduce, but Release builds are much faster to launch. Release is probably at the target ~300ms.
Is 3 seconds reasonable for Debug builds and can this be explained as to why?
Is there any explanation of overhead in XI for slower launch times compared to a Xcode app?
> Is 3 seconds reasonable for Debug builds
> and can this be explained as to why?
yes, connecting to the debugger can easily take 2+ seconds, part of it unrelated to the device itself;
> Is there any explanation of overhead in XI for slower launch
Debug builds are slower and larger, part of it is because this is a soft-debugger (requires extra code to be generated) and because very few optimizations (e.g. no LLVM) are enabled (to keep the build time down and because optimized builds are harder to debug).
For small application the extra mono runtime is a large part of the total application size. Application size is (a bit) related to launch time. For larger (normal) apps that's likely unnoticeable but for a template it might be measurable.
In general any performance profiling should be done with a release build using the same options that will be shipped to customers (enabling LLVM is much encouraged);
Also make sure:
* the managed linker is enabled (it's default but you can double-check). Otherwise it's much larger (load time) and every unused type will need to be registered;
* that the option for using the dynamic registrar is off (default for device) as this requires additional time at startup for registering types;