Комментарии 17
О да. Одна из любимых дисциплин. :) Когда программисту нечего делать он бинарники уменьшает. :)))
У меня рекорд - с "исходника" в 71,6 MB (75.156.057 bytes) ужался в 16,7 MB (17.598.007 bytes). Т.е. порядка 80%. Но это полноценный Winforms, с UI, и даже сторонними библиотеками для UI. Много не порежешь, но при определенной настойчивости... Все таки 20 Мб вместо 100 Мб (условно) - неплохой результат.
На дотнете такими усилиями сражаться за каждый байт априори крайне бестолковое занятие. Ибо забивание гвоздей микроскопом, это даже никто не оценит, потому что файл сопоставимый по размеру с бинарником без AOT все равно не получится, а рекорды по минимизации объема того что NativeAOT тащит за собой к консольному хелловорлду выглядят крайне блекло по сравнению с каким-н .kkrieger двадцатилетней давности на с++ где полноценный зд шутер в 90кб впихнули.
Нафига было писать на C#, чтобы потом скатиться в p/invoke?
а чем плох pinvoke? я переписал код работы с китайской sdk для видеорегистратора с c++ на unsafe c# и по скорости изменений нет (узкое место - sdk), но при этом читаемость и простота кода значительно улучшилась. и естественно, что все это скомпилировано в нативный код.
Справедливости ради стоило в конце "отсортировать" все изменения по реальному эффекту:
превратить каждое изменение в отдельный патч
накатить на исходный билд каждый патч в отдельности
выбрать тот который дает наибольший эффект, применить только его
повторить для оставшихся патчей
Вполне возможно что некоторые патчи перекрываются и накатывая один второй окажется бесполезен
Но в 640к так и не уложились)
Попробуйте переписать на Borland C, модель tiny
После попытки 10 автор стал заниматься откровенной ерундой. Если уж хотелось сделать из C# - С, так и стоило сразу писать на нём
Мне кажется, если бы автор на C++ или даже Си писал, мог бы код до десятков килобайт ужать. Сотни килобайт - всё ещё много для относительно простой программы.
А как же bflat попробовать?
Довольно много размера можно вырезать отключив некоторые JIT оптимизации (такие как клонирование циклов, finally-блоков) или огранить инлайнер
Уменьшаем размер двоичного файла на C# в 90 раз