Xamarin удивителен тем, что позволяет .NET разработчикам писать приложения для Android, iOS, macOS на… С#. Но эта удивительная возможность имеет свою цену и даже простейшее приложение может запросто потреблять неприлично много памяти. Давайте посмотрим как это происходит и что мы можем сделать с этим. Большинство моих примеров основываются на Xamarin.Android, но вы быстро заметите, что это также применимо и к Xamarin.iOS.
Как работает сборщик мусора в Xamarin приложениях
На самом деле в Xamarin приложениях используется несколько типов объектов. Каждое Xamarin приложение имеет объекты, которые живут в двух отдельных мирах:
- Управляемый, мир Mono с объектами, наследуемыми из
System.Object
- Неуправляемый, нативный мир с объектами, наследуемыми от
NSObject
(iOS) илиJava.Lang.Object
(Android)
Из этого также следует что существуют и работают 2 сборщика мусора:
- Сборщик мусора от Mono, называемый SGEN
- Сборщики мусора из нативных миров Android или iOS