Я использую Xamarin для создания своего приложения. До того, как я интегрировал Parse в свое приложение, размер моего двоичного файла (релизная сборка, все оптимизации, LLVM, armv7 и arm64) составлял 23 МБ. Я добавил Parse Xamarin SDK (с использованием компонентов Xamarin) в свое приложение, а затем добавил один файл .cs для представления модели в Parse. После этого размер моего приложения почти удвоился до 42 МБ (т.е. увеличился примерно на 10 МБ для каждой архитектуры).
Мои вопросы:
- Почему такое огромное раздувание приложений?
- Есть ли способ вернуть размер приложения к разумному уровню?
Дополнительная информация:
Я использовал symbols
, чтобы получить информацию из двоичного файла о том, какие символы используют это дополнительное пространство. (Примечание: это только для 1 архитектуры)
Получить все функции из пространства имен System:
symbols TestApp |grep FUNC | grep 'System' | grep -v 'Xamarin' | awk '{ print $3; }' | sed 's/)$//' | awk 'BEGIN{sum = 0} { val = sprintf("%d\n", $0); sum += val; } END {print sum; }'
Перед добавлением DLL синтаксического анализа: 963 КБ
После добавления DLL для синтаксического анализа: 4,5 МБ.
Размер Parse.ios.dll составляет всего 212 КБ. Однако при компиляции он добавляет 3,6 МБ кода в окончательный двоичный файл:
symbols TestApp |grep FUNC | egrep 'Parse|\[PF' | awk '{ print $3; }' | sed 's/)$//' | awk 'BEGIN{sum = 0} { val = sprintf("%d\n", $0); sum += val; } END {print sum; }'
3639308
Добавленные функции — это вещи вроде:
0x000104f4 (0x260) System_Array_InternalArray__ICollection_CopyTo_T_T___int [FUNC, ДЛИНА, NameDwarfMIPSLinkage, MangledNameNList, Merged, NLIST, карликовый, FunctionStarts] 0x000108f8 (0x64c) System_Collections_Generic_Dictionary
intptr_System_WeakReference_System_Collections_ICollection_CopyTo_System_Array_int [FUNC, ДЛИНА, NameDwarfMIPSLinkage, MangledNameNList, Merged, NLIST, Дворф, FunctionStarts]symbols TestApp |grep FUNC | grep 'System' | grep -v 'Xamarin' | awk '{ print $3; }' | sed 's/)$//' | awk 'BEGIN{sum = 0} { val = sprintf("%d\n", $0); sum += val; } END {print sum; }'
Так что похоже, что этот код во многом связан с компиляцией дженериков в собственный код. Есть ли способ уменьшить количество раздувания кода, вызванного дженериками?