WPF .exe – 大文件大小

我正在研究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 

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

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

一般来说,我发现文件大小开销并不令人惊讶。 作为一个大框架,WPF并不以其细腻和高效而着称。

这里的答案有两条评论: “为什么我的.net exe这么大”的分析工具? 也许会有所帮助。

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

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

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

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