Nano Hash - криптовалюты, майнинг, программирование

Parse Xamarin SDK значительно увеличивает размер приложения для iOS

Я использую Xamarin для создания своего приложения. До того, как я интегрировал Parse в свое приложение, размер моего двоичного файла (релизная сборка, все оптимизации, LLVM, armv7 и arm64) составлял 23 МБ. Я добавил Parse Xamarin SDK (с использованием компонентов Xamarin) в свое приложение, а затем добавил один файл .cs для представления модели в Parse. После этого размер моего приложения почти удвоился до 42 МБ (т.е. увеличился примерно на 10 МБ для каждой архитектуры).

Мои вопросы:

  1. Почему такое огромное раздувание приложений?
  2. Есть ли способ вернуть размер приложения к разумному уровню?

Дополнительная информация:

Я использовал 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

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; }'
intptr_System_WeakReference_System_Collections_ICollection_CopyTo_System_Array_int [FUNC, ДЛИНА, NameDwarfMIPSLinkage, MangledNameNList, Merged, NLIST, Дворф, FunctionStarts]

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


Ответы:


1

Включите управляемый компоновщик для всех сборок.

В параметрах сборки iOS для проекта установите для параметра «Поведение ссылки» значение «Все сборки».

Дополнительные сведения о компоновщике: http://developer.xamarin.com/guides/ios/advanced_topics/linker/

Более общая информация о сборке (в том числе о том, как минимизировать размер приложения) объясняется здесь: Расширенный механизм сборки iOS

17.07.2015
  • Я уже делаю это. Я тоже смотрел видео, но там не так много, кроме того, что вы уже упомянули. 17.07.2015
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..