mono / mono

Mono open source ECMA CLI, C# and .NET implementation.
https://www.mono-project.com
Other
11.14k stars 3.82k forks source link

Epic: Output Size Reduction #9217

Open marek-safar opened 6 years ago

marek-safar commented 6 years ago

The CoreFX source code import and some new features like the interpreter have had a negative impact on the final binary size of binaries we produce for Xamarin scenarios. The size we care about is not the Mono libraries size but the final size of customer's app once all tools used to reduce the size are applied. We never tracked this continuously which is one of the reasons we regressed.

Most if not all tasks bellow will have a positive impact on the size and could be done separately. The one which will require significant effort will be extracted to the sub-tasks.

Infrastructure improvements

ILLinker improvements

Runtime improvements

BCL improvements

Many of the tasks here could be automated at least from the analysis perspective. We should build tools for them as it's very likely we'll have to repeat them every time we update any of our dependencies.

Major BCL size regressions

migueldeicaza commented 6 years ago

Notes:

marek-safar commented 6 years ago

SRE should be removed by a linking stage, so we should figure out what is keeping it around

I don't think we have simple way to remove SRE from XA runtime by linker and we'll hit the same problem on XI once we enable interpreter.

Before we spend a lot of time doing some of these things like

The work has been done on some features and we are working together on more with CoreFX folks. However, the way how they have done so far would require static analysis linker support which we don't have. Secondly, this is not about code which we can easily remove. This is about explicit settings selected by the users with features like non-file URI resolving functionality in XmlUrlResolver, something similar we did with codepages.

You can see the proposal at https://github.com/dotnet/designs/pull/42/files