Pull to refresh

Comments 14

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Sign up to leave a comment.

Articles