2014-09-17 1 views
0

У меня очень большая проблема с нашим приложением. Нам нужно много места для преобразования битмапа, но непосредственно при запуске (из приложения) большая часть памяти получает выделение с помощью неизвестного материала ... Ниже вы можете найти Консольный выход из Xamarin Studio. Что может вызвать такие большие распределения? Приложения тестируется на различных устройствах, ниже Выход из наихудших (Samsung Galaxy S3)Проблемы с запуском приложений для Android (растущая куча)

Это мой OnCreate из MainActivity:

protected override void OnCreate(Bundle bundle) 
{ 
    base.OnCreate(bundle); 
    SetContentView(Resource.Layout.Main); 
} 

Консоли вывод:

Forwarding debugger port 8808 
Detecting existing process 
Loaded assembly: /storage/emulated/0/Android/data/com.#AppName#.#AppName#/files  /.__override__/#AppName#.dll 
Loaded assembly: Mono.Android.dll [External] 
Loaded assembly: System.Core.dll [External] 
Loaded assembly: MonoDroidConstructors [External] 
[monodroid-debug] Trying to initialize the debugger with options: --debugger- agent=transport=dt_socket,loglevel=0,address=127.0.0.1:8808,server=y,embedding=1 
[libc] WARNING: generic atexit() called from legacy shared library 
[Mono] Image addref mscorlib[0x57bc76f0] -> mscorlib.dll[0x41d0f588]: 1 
[Mono] AOT module 'mscorlib.dll.so' not found: dlopen failed: library "/data  /data/com.#AppName#.#AppName#/lib/mscorlib.dll.so" not found 
[Mono] Assembly mscorlib[0x57bc76f0] added to domain RootDomain, ref_count=1 
[Mono] Assembly Loader probing location: '/storage/emulated/0/Android  /data/com.#AppName#.#AppName#/files/.__override__/#AppName#.dll'. 
[Mono] Image addref #AppName#[0x57bc9dd8] -> /storage/emulated/0/Android  /data/com.#AppName#.#AppName#/files/.__override__/#AppName#.dll[0x57bc9008]: 2 
[Mono] Assembly #AppName#[0x57bc9dd8] added to domain RootDomain, ref_count=1 
[Mono] AOT module '/storage/emulated/0/Android/data/com.#AppName#.#AppName#/files/.__override__/#AppName#.dll.so' not found: dlopen failed: library "/data /data/com.#AppName#.#AppName#/lib//storage/emulated/0/Android/data/com.#AppName#.#AppName#/files/.__override__/#AppName#.dll.so" not found 
[Mono] Assembly Loader loaded assembly from location: '/storage/emulated/0/Android/data/com.#AppName#.#AppName#/files/.__override__/#AppName#.dll'. 
[Mono] Config attempting to parse: '/storage/emulated/0/Android/data/com.#AppName#.#AppName#/files/.__override__/#AppName#.dll.config'. 
[Mono] Config attempting to parse: '/Users/builder/data/lanes/1131/2a7b6821/source/monodroid/builds/install/mono-armv7/etc/mono/assemblies/#AppName#/#AppName#.config'. 
[monodroid-gc] GREF GC Threshold: 46800 
[Mono] Image addref Mono.Android[0x57bcac10] -> Mono.Android.dll[0x57bca250]: 1 
[Mono] Assembly Mono.Android[0x57bcac10] added to domain RootDomain, ref_count=1 
[Mono] AOT module 'Mono.Android.dll.so' not found: dlopen failed: library "/data/data/com.#AppName#.#AppName#/lib/Mono.Android.dll.so" not found 
[Mono] Assembly Ref addref Mono.Android[0x57bcac10] -> mscorlib[0x57bc76f0]: 2 
[Mono] Image addref System.Core[0x59182658] -> System.Core.dll[0x59181a40]: 1 
[Mono] Assembly System.Core[0x59182658] added to domain RootDomain, ref_count=1 
[Mono] AOT module 'System.Core.dll.so' not found: dlopen failed: library "/data/data/com.#AppName#.#AppName#/lib/System.Core.dll.so" not found 
[Mono] Assembly Ref addref Mono.Android[0x57bcac10] -> System.Core[0x59182658]: 2 
[Mono] Assembly Ref addref System.Core[0x59182658] -> mscorlib[0x57bc76f0]: 3 
[Mono] Assembly Ref addref #AppName#[0x57bc9dd8] -> Mono.Android[0x57bcac10]: 2 
[Mono] DllImport attempting to load: '__Internal'. 
[Mono] DllImport loaded library '(null)'. 
[Mono] DllImport searching in: '__Internal' ('(null)'). 
[Mono] Searching for '_monodroid_gc_wait_for_bridge_processing'. 
[Mono] Probing '_monodroid_gc_wait_for_bridge_processing'. 
[Mono] Found as '_monodroid_gc_wait_for_bridge_processing'. 
[Mono] DllImport searching in: '__Internal' ('(null)'). 
[Mono] Searching for '_monodroid_get_identity_hash_code'. 
[Mono] Probing '_monodroid_get_identity_hash_code'. 
[Mono] Found as '_monodroid_get_identity_hash_code'. 
[Mono] Assembly Ref addref #AppName#[0x57bc9dd8] -> mscorlib[0x57bc76f0]: 4 
[Mono] DllImport searching in: '__Internal' ('(null)'). 
[Mono] Searching for '_monodroid_gref_log_new'. 
[Mono] Probing '_monodroid_gref_log_new'. 
[Mono] Found as '_monodroid_gref_log_new'. 
[dalvikvm-heap] Grow heap (frag case) to 12.344MB for 2005072-byte allocation 
[dalvikvm-heap] Grow heap (frag case) to 19.993MB for 8020240-byte allocation 
[dalvikvm-heap] Grow heap (frag case) to 32.004MB for 11632656-byte allocation 
[Mono] DllImport searching in: '__Internal' ('(null)'). 
[Mono] Searching for '_monodroid_gref_log_delete'. 
[Mono] Probing '_monodroid_gref_log_delete'. 
[Mono] Found as '_monodroid_gref_log_delete'. 

Спасибо за помощь!

Edit:

Использование LargeHeap в манифесте не помогает. И когда я загружаю приложение без макета на всех, размер кучи также увеличивается до 19 мб.

+0

Время работы приложения HelloWorld (из 100-мегабайтной кучи) с использованием ~ 15 МБ (в версии) ~ 14 МБ (в версии/aot/llvm) ~ 16 МБ (в режиме отладки, без отладчика), ~ 17 МБ (в режиме отладки) который включает в себя среду исполнения на основе Mono (NDK), некоторые .Net-сборки, java-мост, активность запуска и т. д. ... при запуске звучит прямо для меня .... – SushiHangover

ответ

1

Я нашел проблему. В моей папке с рисунком была неправильная Icon.png. Значок, который я использовал, имеет разрешение 708x708. Я заменил его на меньший, теперь он работает ... Спасибо Эркану за то, что он толкнул меня в правильном направлении.

1

У вас есть одна строка кода, которая может привести к выделению памяти, если вы не используете собственный класс Application и это setContentView(). У вас могут быть большие изображения на вашем макете xml или слишком много изображений. Попробуйте упростить макет xml или использовать более мелкие изображения. Если вы не получаете исключение из памяти, вам не нужно это менять; однако вам потребуется больше места для операций с изображениями, чтобы вы могли это сделать (но это не рекомендуется): android:largeHeap="true"

+0

Я уже пробовал оба этих подхода. Без SetContentView() размер кучи составляет около 19 Мб, что, по моему мнению, также очень много. LargeHeap активирован, но не помогает ... –