Mono 3.6.0 Upgrade: Focused on performance

Xamarin released Mono 3.6.0, the open source runtime that has enabled .Net developers to develop applications for non-Windows platforms. The upgrade comes with a range of improvements in areas varying from garbage collection to class libraries. It also allows developers to create multiplatform applications using C-Sharp. Though initially targeted for developing Linux applications, it has been picked for mobile app development; primarily because it cuts memory usage and enhances the overall performance.



Mono App

Miguel de Icaz:

“In terms of numbers, yes, Mono is now more successful on mobile with tens of thousands of apps published with it than it ever was on Linux. We continue with our main themes: improving performance, reducing memory usage, eliminating bugs, and improving our platform support”.


Also, Mono development cycles have been switched from long to short term.

With this upgradation, C# can now be used to create native applications for platforms like Apple iOS and Mac OS, Android, Windows, and Windows Phone.

Major Improvements



Mono Development

• Xamarin’s profiler

The runtime performance counters have been embedded into the profiler enabling the information of performance counter to be surfaced to the profiling tools. The profiler now generates back trace for statistical mode. Periodical flushing has been introduced to help interactive users. This implies that the profiling will send data even when the application is not currently sending data.

• Class Libraries

The upgrade came with big refactoring on the class library build. Class libraries in this latest version feature significant multiple improvements in HTTP stack as well as in the namespaces like System.IO.Compression for basic compression and decompression services of streams.

• Garbage collection
Garbage collection has been improved through the inclusion of two new modes to enhance some workload.



Mono Debugger

• Mono Debugger

The Mono debugger came with improved performance and bug fixes. A buffered response mode has been appended to improve network performance on high-latency links like USB. Also, it has support for line and column ranges; and changing the current line in the top frame. With the help of a high-performance light-weighted IL interpreter, the debugger now has support for reading properties without any need of calling their getter. This enables the inspection of more properties while the process is completely stopped, without having to temporarily resume the execution of the target to run the property code.

• Performance

In the performance area, fine-grained locking has been established rather than a big hot lock. Also, better hashing of runtime internal elements avoids slowdowns with generics.

• Bug Fixes

There were many bug fixes to the C# Compiler, runtime environment, core libraries, Windows.forms and several other bug fixes. Some of the bug fixes to the C# Compiler include flow analysis of binary expressions without using logical operators, rectify expression tree conversion type for enum comparisons, unify reachable label lookup, etc.

• Other Changes

The update fixed the management of the volatile. CIL prefix. Also, Xamarin now distribute ikdasm which is a reliable disassembler and does not have limitations as in the case of monodis which required a complete set of compatible assemblies for disassembling. Plus, the Equality Comparer is optimized for more types.


Mono 3.6.0 is a hard work of 66 contributors that resulted in 112 bugs fixed; it’s quite an achievement.