Небольшие .NET-приложения не могут реально конкурировать с приложениями на C / C ++ по размеру памяти.
.NET. Время выполнения огромно по сравнению с тем, что нужно нативному приложению для запуска. Чтобы запустить приложение .NET, CLR должен быть в памяти. Он должен не только загружать такие компоненты, как JIT-компилятор, GC и т. Д., Он также требует ряда внутренних структур данных. Например. даже самое простое приложение .NET имеет три домена приложений, два из которых используются внутри среды CLR, а одно - для самого приложения.
Кроме того, сборки загружаются при обращении к ним. Даже если методы не объединяются до тех пор, пока они не понадобятся, сама сборка при загрузке использует много адресного пространства. Когда код соединяется в какой-то момент, он снова сохраняется в памяти как собственный код. Таким образом, по существу скомпилированный код присутствует дважды в приложении .NET.
Наконец, система типов намного сложнее в .NET по сравнению с тем, что вы найдете в приложении C / C ++. Каждый отдельный объект несет информацию о своем типе. Это позволяет отражать и другие полезные функции, но это имеет свою цену.
Если вы хотите очень маленького размера, .NET может быть достаточно хорошим, но это, конечно, не самый очевидный выбор, поскольку вы будете платить за накладные расходы времени выполнения.
Также, пожалуйста, смотрите этот связанный вопрос Сокращение использования памяти приложениями .NET?