Библиотека Java-привязок Xamarin страдает от времени выполнения OutOfMemoryError - PullRequest
0 голосов
/ 27 января 2019

Используя описанную технику здесь , я создал библиотеку привязок Android Xamarin, которая инкапсулирует две библиотеки Java: ZXing и zxing-android-embedded .

(Да, я знаю, что ZXing был портирован на C # как ZXing.Net и что существует даже кроссплатформенная библиотека-обертка, ZXing.Net.Mobile , что поддерживает Xamarin.Forms, но я обнаружил, что их производительность на Android низкая по сравнению с нативным Java ZXing. Напротив, моя библиотека привязок Android, которая просто оборачивает нативный ZXing, кажется намного быстрее).

При развертывании в простом одностраничном приложении Xamarin.Forms моя библиотека привязок правильно захватывает и декодирует отсканированные штрих-коды. Однако после нескольких минут работы происходит сбой с Java.Lang.OutOfMemoryError.

Используя Android Device Monitor, я вижу, что размер кучи постоянно увеличивается, пока не достигнет 128 МБ, когда происходит сбой:

enter image description here

Кажется разумным предположить, что увеличение кучи вызвано утечкой памяти, вызванной повторным захватом изображения с камеры, которое неправильно расположено.

Из вывода отладки я также вижу, что происходит сбой при попытке выделить память для предварительного просмотра новой камеры, что в некоторой степени поддерживает вышеприведенное предположение.

enter image description here

К сожалению, у меня нет опыта в отладке утечек памяти (особенно тех, которые происходят в реализации Java библиотеки привязок Android).

Буду признателен за любые подсказки относительно того, как я могу диагностировать конкретную причину утечки, а также за любые рекомендации о дополнительных мерах предосторожности при утечке памяти, которые требуются при использовании библиотек привязок Java из Xamarin.

Большое спасибо, заранее.

...