WPF .exe - 大文件大小

时间:2014-01-06 07:27:53

标签: c# wpf clr

我正在研究WPF应用程序,发现.exe的大小超过1.2MB。我想减少最终可执行文件的大小。代码不超过200 Kb,我在项目中使用了几个.png图像,总共占用了大约20kb。为什么最终的可执行文件如此之大?我使用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构建项目)

更新

我的构建选项是:

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

2 个答案:

答案 0 :(得分:2)

这可能是嵌入式资源的一个问题。

如果您向项目添加了图像或其他资源,即使您从项目中删除了该文件,该资源也将保持嵌入状态。

检查项目属性的参考资料部分。

例如,您是否先将图像添加为位图,然后删除文件并添加为png?

答案 1 :(得分:1)

具有所有依赖关系的间接引用的默认样式通常在代码或XAML中不可见。我不确定但是如果WPF将它们嵌入到exe中,这可能会导致一些开销。您可以通过删除大多数与WPF相关的代码来测试这一点,以查看这是否会显着影响文件大小。

由于是WPF并且可执行,因此也可能存在开销。您可以通过将代码放入WPF自定义或用户控件库项目来测试它。这可以由visual studio创建。如果对于相同的内容,生成的DLL比EXE文件小得多,它可能是WPF和可执行文件的组合。

一般来说,我发现文件大小开销并不令人惊讶。作为一个重要框架,WPF并不以其优雅和高效而闻名。

这里对答案的两条评论:"Why is my .net exe so huge" analyzer tool?也可能有所帮助。

相关问题