WPF.exe - большой размер файла - программирование

WPF.exe - большой размер файла

Я работаю над WPF-приложением, а размер .exe превышает 1,2 МБ. Я хотел бы уменьшить размер финального исполняемого файла. Код не более, чем несколько 200 Кб, я использую несколько изображений .png в проекте, который alltogether занимает около 20 КБ. Почему окончательный исполняемый файл такой большой? Я использовал статистику ILDASM, чтобы посмотреть статистику .exe. Вывод результатов ниже:

File size            : 1267712
 PE header size       : 512 (496 used)    ( 0.04%)
 PE additional info   : 1547              ( 0.12%)
 Num.of PE sections   : 3
 CLR header size     : 72                 ( 0.01%)
 CLR meta-data size  : 72524              ( 5.72%)
 CLR additional info : 1160002            (91.50%)
 CLR method headers  : 3189               ( 0.25%)
 Managed code         : 28702             ( 2.26%)
 Data                 : 2048              ( 0.16%)
 Unaccounted          : -884              (-0.07%)

 Num.of PE sections   : 3
   .text    - 1265152
   .rsrc    - 1536
   .reloc   - 512

 CLR meta-data size  : 72524
   Module        -    1 (10 bytes)
   TypeDef       -   58 (812 bytes)     0 interfaces, 0 explicit layout
   TypeRef       -  250 (1500 bytes)
   MethodDef     -  647 (9058 bytes)    0 abstract, 0 native, 639 bodies
   FieldDef      -  216 (1296 bytes)    10 constant
   MemberRef     -  481 (2886 bytes)
   ParamDef      -  460 (2760 bytes)
   MethodImpl    -   11 (66 bytes)
   Constant      -   11 (66 bytes)
   CustomAttribute-  506 (3036 bytes)
   StandAloneSig -   73 (146 bytes)
   InterfaceImpl -   27 (108 bytes)
   PropertyMap   -   29 (116 bytes)
   Property      -  233 (1398 bytes)
   MethodSemantic-  304 (1824 bytes)
   TypeSpec      -   30 (60 bytes)
   Assembly      -    1 (22 bytes)
   AssemblyRef   -   13 (260 bytes)
   ManifestResource-    2 (24 bytes)
   NestedClass   -   17 (68 bytes)
   EventMap      -    5 (20 bytes)
   Event         -    7 (42 bytes)
   MethodSpec    -   12 (48 bytes)
   Strings       - 21669 bytes
   Blobs         - 18740 bytes
   UserStrings   -  6244 bytes
   Guids         -    16 bytes
   Uncategorized -   229 bytes

 CLR additional info : 1160002
   Resources         - 1160002

 CLR method headers : 3189
   Num.of method bodies  - 639
   Num.of fat headers    - 169
   Num.of tiny headers   - 470
   Num.of fat sections   - 3
   Num.of small sections - 25

 Managed code : 28702
   Ave method size - 44

Как вы можете видеть, дополнительная информация CLR занимает большую часть пространства. Я использую все визуальные стили в моем проекте как StaticResource, что, я думаю, не имеет большого значения? Как можно объяснить большой размер .exe? (Построение проекта в режиме освобождения x64)

UPDATE:

Мои параметры сборки:

Configuration - Release
Platform - x64
Optimize code - enabled
Allow unsafe code - disabled
Conditional comppilation symbols - none
4b9b3361

Ответ 1

Непрямо ссылающиеся стили по умолчанию со всеми зависимостями, которые у них есть, обычно не отображаются в коде или XAML. Я не уверен, но если WPF внедряет их в exe, это может объяснять некоторые из накладных расходов. Вы можете проверить это, удалив большую часть зависимого от WPF кода, чтобы увидеть, влияет ли это на размер файла.

Также могут быть накладные расходы из-за того, что они являются WPF и являются исполняемыми. Вы можете проверить это, поставив свой код в проект библиотеки пользовательских или пользовательских элементов управления WPF. Это может быть создано визуальной студией. Если для одного и того же содержимого результирующие библиотеки DLL намного меньше EXE файлов, это может быть комбинация WPF и быть исполняемым.

В общем, я нахожу, что размер файла не является неожиданным. В качестве большой структуры WPF не известен своей тонкостью и эффективностью.

Два комментария к ответу здесь: "Почему мой .net exe такой огромный" инструмент анализатора? также может быть полезен.

Ответ 2

Это, вероятно, проблема со встроенными ресурсами.

Если вы добавили изображения или другие ресурсы в проект, даже если вы удалите файл из проекта, ресурс останется включенным.

Проверьте раздел "Ресурсы" свойств проекта.

Например, вы сначала добавили изображения в виде растровых изображений, а затем удалили файлы и добавили в виде png?