Intereting Posts
Реагирование на BLE-направленную рекламу (ADV_DIRECT_IND) на Android RoadManager для ошибки osmdroid Как использовать собственные приложения для Android и IOS WebGL? Проверка диалогового ввода Контактные маяки: непоследовательные и ненадежные результаты при определении расстояния маяка Ошибка: (27, 13) Не удалось решить: com.google.firebase: firebase-core: 9.8.0 Дальнейшее понимание setRetainInstance (true) Android / PhoneGap: использование сторонних библиотек в разработке плагинов Android: как использовать более одного пакета в конфигурации приложения Facebook Сбой эмулятора Android: «Dx bad class file magic» / ClassNotFoundException при запуске? Как правильно выравнивать виджет в горизонтальной линейной компоновке андроида? Определите ABI текущей сборки в build.gradle Android – есть ли способ прослушивания, если GPS включен или отключен Объект не заблокирован нитью перед уведомлением () в onPostExecute Дизайн кода для многократного использования элементов пользовательского интерфейса drag & drop в android

Потребление памяти андроидов Xamarin растет бесконечно после того, как использование достигнет определенного порога

У меня есть приложение для андроида Xamarin, и кажется, что когда использование памяти приложения достигает определенного порога от 140 МБ до 160 МБ, приложение быстро начнет брать больше памяти, как в бесконечном цикле. Я могу видеть на выходе отладчика, что сборщик мусора постоянно пытается освободить память, но, похоже, не работает. Использование памяти будет, по-видимому, безгранично. Я наблюдал, как он вырос до 500 мб памяти, прежде чем я решил убить приложение. Я НИКОГДА не получаю исключение из памяти, которое действительно странно. Из того, что я могу сказать, нет никакой конкретной части кода, что это происходит, я могу быть на разных экранах, и то же самое произойдет. Я тестировал несколько устройств, поэтому я знаю, что это не просто проблема с моим устройством. Я бы попытался показать какой-то код, но у меня нет никаких преступников.

Среди компонентов, используемых в моем приложении, которые могут быть причиной проблемы, являются клиенты ReshSharp, .net Webclients, использование растровых изображений, TabHost с 3 вкладками, менеджером местоположений и съемкой фотографий через камеру. Я в тупик на этом, любая помощь очень ценится.

EDIT: Возможно, я сузился, где одна из проблем может быть. У меня есть активность камеры внутри табуста для съемки фотографий, у меня есть метод, который вызывается после снимка, после нескольких фотографий возникает проблема. Вот метод

public void OnPictureTaken(byte[] data, global::Android.Hardware.Camera c) { GC.Collect(); Bitmap b = BitmapExtensions.DecodeBitmapFromArray(data, WIDTH, HEIGHT); Matrix matrix = new Matrix(); matrix.SetRotate(RotationDegrees, WIDTH / 2f, HEIGHT / 2f); var bitmapScalled = Bitmap.CreateBitmap(b, 0, 0, WIDTH, HEIGHT, matrix, true); var d = global::Android.OS.Environment.ExternalStorageDirectory.Path + "/MyApp/"; if (!Directory.Exists(d)) Directory.CreateDirectory(d); file = d + Guid.NewGuid().ToString() + ".jpg"; System.IO.StreamWriter sw = new System.IO.StreamWriter(file); bitmapScalled.Compress(Bitmap.CompressFormat.Jpeg, 70, sw.BaseStream); sw.Close(); global::Android.Locations.Location location = CameraLocationManager.GetLastKnownLocation(CameraLocationManager.GetBestProvider(new Criteria() { Accuracy = Accuracy.Fine }, true)); Intent intent = new Intent(this, typeof(EditPhotoActivity)); intent.PutExtra("LastKnownLocation", JsonConvert.SerializeObject(LastKnownLocation)); intent.PutExtra("Filename", file); //StartActivity(intent); StartCamera(); // restart camera preview b.Recycle(); b = null; sw.Dispose(); bitmapScalled.Dispose(); bitmapScalled = null; // clean up GC.Collect(); } 

Хотя профайлер Xamarin все еще находится в предварительном просмотре, он помог мне значительно отслеживать проблемы с памятью, которые у нас были в нашем приложении. Прочитав последний комментарий, я могу подтвердить, что Xamarin Insights (v1.10.1) имеет значительную огромную подпись в памяти (и может даже протечь). После того как мы удалили его из нашего кода – приложение вел себя очень быстро!

В нижней строке – используйте профилировщик для определения проблем с памятью, и если у вас есть Xamarin Insights, используемые в вашем приложении, я предлагаю удалить его до дальнейшего уведомления.