2014-01-06 5 views
10

私はWPFアプリケーションで作業していますが、.exeのサイズは1.2MBを超えています。私は最終的な実行可能ファイルのサイズを縮小したいと思います。コードはわずか200 Kbに過ぎず、私はプロジェクトでいくつかの.pngイメージを使用します。これはalltogetherが約20kbを占めます。なぜ最終的な実行ファイルはそれほど大きいのですか?私はILDASMの統計を使って.exeの統計を調べました。以下の出力を投稿する:WPF .exe - large filesize

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 
+2

私はCLRの追加情報に貢献するものを理解しようともっと興味があります。:) 1.2MBのEXEでライブできます。 – jester

+0

コンパイラ/ビルドオプションを表示してください。 Btwの空白も「コード」なので、コードの量は出力サイズに最も適していません。しかし、ここで何かが間違いなく、私ははるかに大きなコードベースを持っています。 – stijn

+0

@stijnがビルドオプションを使用して質問を更新しました – jester

答えて

1

すべての依存関係を持つ間接的に参照される既定のスタイルは、コードやXAMLでは通常表示されません。私は確信していませんが、WPFがそれらをexeに埋め込んでいる場合、これはオーバーヘッドの一部を占める可能性があります。これがWPF依存コードの大部分を削除して、ファイルサイズに大きな影響を与えるかどうかを調べることで、これをテストできます。

WPFで実行可能なためにオーバーヘッドが発生する可能性があります。コードをWPFカスタムまたはユーザーコントロールライブラリプロジェクトに配置することでこれをテストできます。これはVisual Studioで作成できます。同じコンテンツの場合、生成されるDLLがEXEファイルよりもはるかに小さい場合は、WPFと実行可能ファイルの組み合わせである可能性があります。

一般に、ファイルサイズのオーバーヘッドは驚くことではありません。大きな枠組みとして、WPFはその薄さと効率性に関して知られていません。

回答の2つのコメント:"Why is my .net exe so huge" analyzer tool?も役立ちます。

+0

最初のコメントは私に答えを与えました。ありがとう:) – jester

2

これはおそらく、埋め込みリソースの問題です。

プロジェクトにイメージやその他のリソースを追加した場合、プロジェクトからファイルを削除してもリソースは埋め込まれたままになります。

プロジェクトのプロパティの[リソース]セクションを確認してください。

たとえば、画像をビットマップとして追加した後、ファイルを削除してpngとして追加しましたか?