【问题标题】:"Why is my .net exe so huge" analyzer tool?“为什么我的 .net exe 如此庞大”分析工具?
【发布时间】:2012-02-16 14:53:36
【问题描述】:

是否有工具可以解释 .NET 程序集(可执行文件或 DLL 文件)的大小?

在过去,有一个 IDE 扩展可以详细说明项目使用的空间。

它应该显示大的代码文件:

和数据资源

.NET 世界有这样的事情吗?

我真的认为迁移到 .NET,不再需要将整个 VCL 构建到可执行文件中,可执行文件的大小会缩小。

阅读奖励

【问题讨论】:

  • 这个问题太广泛了.....
  • 这个问题令人困惑。您在.NET 中工作吗?您包含的对话框适用于 Delphi Win32 应用程序。你在为 .NET 使用 Delphi 吗?如果是这样,您应该在标签中包含它(并提供有关您正在使用的编译器选项的信息)。
  • @KenWhite i am 确实在 .NET 中工作。我包含的对话框适用于 Delphi Win32 应用程序(即过去)。这个问题是针对 .NET 和 .NET 程序集的。我碰巧在 Visual Studio 2010 中工作。尽管我认为任何有价值的工具都可以分析任何 .NET 程序集,无论用于创建它的编译器(包括 DFDN)
  • 正如我所说,您的问题令人困惑。 (实际上它仍然是。)您提到了“IDE 扩展”,但那不是 VS IDE 扩展,您提到了“构建整个 VCL”,并显示了 Delphi 项目对话框,并且没有提及任何 IDE/标签中的语言。
  • @KenWhite 这是对那些仍然了解一种拥有 4% 市场份额的语言的人的内部认可。

标签: .net assemblies .net-assembly


【解决方案1】:

标准 SDK 采用 ILDASM (IL Disassembler),在 View 菜单中有“Statistics”选项,将其分解如下:

 File size            : 3072
 PE header size       : 512 (456 used)    (16.67%)
 PE additional info   : 167               ( 5.44%)
 Num.of PE sections   : 2
 CLR header size     : 72                 ( 2.34%)
 CLR meta-data size  : 1572               (51.17%)
 CLR additional info : 0                  ( 0.00%)
 CLR method headers  : 15                 ( 0.49%)
 Managed code         : 77                ( 2.51%)
 Data                 : 512               (16.67%)
 Unaccounted          : 145               ( 4.72%)

 Num.of PE sections   : 2
   .text    - 2048
   .reloc   - 512

 CLR meta-data size  : 1572
   Module        -    1 (10 bytes)
   TypeDef       -    4 (56 bytes)      0 interfaces, 0 explicit layout
   TypeRef       -   15 (90 bytes)
   MethodDef     -    4 (56 bytes)      0 abstract, 0 native, 4 bodies
   FieldDef      -    2 (12 bytes)      0 constant
   MemberRef     -   15 (90 bytes)
   ParamDef      -    4 (24 bytes)
   CustomAttribute-   13 (78 bytes)
   StandAloneSig -    1 (2 bytes)
   Assembly      -    1 (22 bytes)
   AssemblyRef   -    1 (20 bytes)
   Strings       -   571 bytes
   Blobs         -   336 bytes
   UserStrings   -     8 bytes
   Guids         -    16 bytes
   Uncategorized -   181 bytes

 CLR method headers : 15
   Num.of method bodies  - 4
   Num.of fat headers    - 1
   Num.of tiny headers   - 3

 Managed code : 77
   Ave method size - 19

这应该是一个很好的起点。

【讨论】:

  • 优秀的起点。今天我了解到 Visual Studio 将我的 PNG 压缩图像存储为未压缩的 BMP。在最终的 8MB 程序集中,1 MB 的 PNG 图像占用 7.5 MB。 叹息
  • @IanBoyd 您可以将该图像附加为内容,而不是图像属性菜单中的资源。
  • @balexandre “内容”构建选项意味着文件将位于输出目录中 - 它们不会嵌入到输出程序集中。听起来 OP 应该使用 Manifest Resource Streams 来存储 PNG 数据。
猜你喜欢
  • 2021-04-08
  • 1970-01-01
  • 2023-01-10
  • 2015-05-14
  • 2013-04-02
  • 1970-01-01
  • 2020-09-09
  • 1970-01-01
  • 2021-10-10
相关资源
最近更新 更多