Как стать автором
Обновить

Комментарии 17

О да. Одна из любимых дисциплин. :) Когда программисту нечего делать он бинарники уменьшает. :)))
У меня рекорд - с "исходника" в 71,6 MB (75.156.057 bytes) ужался в 16,7 MB (17.598.007 bytes). Т.е. порядка 80%. Но это полноценный Winforms, с UI, и даже сторонними библиотеками для UI. Много не порежешь, но при определенной настойчивости... Все таки 20 Мб вместо 100 Мб (условно) - неплохой результат.

Расскажите как это сделали ?

Я в своё время с помощью TFM обходил неявные зависимости WinForms, но чтобы с ним 16 это круто.

На дотнете такими усилиями сражаться за каждый байт априори крайне бестолковое занятие. Ибо забивание гвоздей микроскопом, это даже никто не оценит, потому что файл сопоставимый по размеру с бинарником без AOT все равно не получится, а рекорды по минимизации объема того что NativeAOT тащит за собой к консольному хелловорлду выглядят крайне блекло по сравнению с каким-н .kkrieger двадцатилетней давности на с++ где полноценный зд шутер в 90кб впихнули.

Так это для себя делается, а не для размера. Чисто спортивная штука, которая помогает получше узнать кишочки NET, ключи сборки и когда их можно применять и так далее. Расширение кругозора.

Нафига было писать на C#, чтобы потом скатиться в p/invoke?

а чем плох pinvoke? я переписал код работы с китайской sdk для видеорегистратора с c++ на unsafe c# и по скорости изменений нет (узкое место - sdk), но при этом читаемость и простота кода значительно улучшилась. и естественно, что все это скомпилировано в нативный код.

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

Справедливости ради стоило в конце "отсортировать" все изменения по реальному эффекту:

  • превратить каждое изменение в отдельный патч

  • накатить на исходный билд каждый патч в отдельности

  • выбрать тот который дает наибольший эффект, применить только его

  • повторить для оставшихся патчей

Вполне возможно что некоторые патчи перекрываются и накатывая один второй окажется бесполезен

Но в 640к так и не уложились)

Попробуйте переписать на Borland C, модель tiny

Зачем Borland? copy con wordle.com

После попытки 10 автор стал заниматься откровенной ерундой. Если уж хотелось сделать из C# - С, так и стоило сразу писать на нём

Мне кажется, если бы автор на C++ или даже Си писал, мог бы код до десятков килобайт ужать. Сотни килобайт - всё ещё много для относительно простой программы.

Эпично выглядела бы расширенная версия статьи, где условный хеллоуворлд на 60+ мег плавно проходит процесс последовательных метаморфоз # > ++ > C > asm. Впрочем, это уже книга получится. 18+

А как же bflat попробовать?

Довольно много размера можно вырезать отключив некоторые JIT оптимизации (такие как клонирование циклов, finally-блоков) или огранить инлайнер

NativeAOT это уже после JIT-а, т.е. бежим уже без него.

Как это противоречит тому что я написал?

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории