2012-04-17 24 views
34

私はクラスライブラリを持っており、その一部だけを使用しています。作成されたコードのサイズを縮小するために使用されていないものを削除する必要がありますか?コンパイラは実行可能なコードのみをコンパイルしますか?

私が見た限りでは、コンパイラはこれを処理し、コードを削除してもEXEファイルのサイズは変更されません。これはいつも真実だろうか?不要なコードをすべて削除するのは非常に時間がかかるので、その必要があるかどうかを知りたい。

詳細情報:実行中のコードから呼び出されないクラスライブラリ内のメソッドとクラスがありますが、それらはクラスライブラリ内のコードの他の部分(自身は呼び出されません)によって参照されます。

+3

.NETリフレクタをつかんで、「リリースされた」DLLに含まれているものだけをいつでも見ることができます(Blaiseのようないくつかの珍しいものは決定できません)。学習する最善の方法は実験することです(またはそれは私の経験です) –

+3

コンパイラは、そのコードを使用しようとするかもしれない誰かにそのDLLを配布しないことを伝えることができるでしょうか? –

+1

@AnthonyPegramライブラリは別にコンパイルされません。私は自分のプロジェクトにソースコードを持っています。 – ispiro

答えて

34

いいえ、コンパイラには「デッド」コードも含まれています。これの単純な理由は、実行されるコードと実行されないコードを正確に知ることが常に可能なわけではないということです。たとえば、決して参照されないプライベートメソッドであってもリフレクションを介して呼び出すことができ、パブリックメソッドは外部アセンブリによって参照される可能性があります。

ツールを使用して、未使用のメソッド(他の未使用のメソッドによってのみ呼び出されるメソッドを含む)を検索して削除することができます。 What tools and techniques do you use to find dead code?Find unused codeを試してみてください。

0

コンパイラが何かを削除するのではないかと疑います。事実、コンパイラは、型がインスタンス化され、名前で呼び出されるメソッドが反映されるため、何が使用されているのか、何が使用されていないのかを知ることはできません。

6

すべてがコンパイルされます。それが呼び出されたかどうかにかかわらず。コードは外部ライブラリによって呼び出されることがあります。

コンパイラがコードを無視する唯一の方法は、コンパイラプリプロセッサディレクティブを使用することです。これらの詳細についてはhereをご覧ください。

+0

外部ライブラリがパブリッククラスまたはパブリッククラスの保護されたメンバーである場合にのみ呼び出すことができます。 –

0

Utilityという名前のクラスライブラリがあるとします。新しいプロジェクトを作成し、このクラスライブラリをそのプロジェクトに追加しました。あなたのEXEがクラスライブラリからわずか1〜2のメソッドを呼び出すとしても、参照されていないコードを削除することは決してお勧めできません。

再使用の原則に反します。 EXEから参照されないライブラリにいくつかのクラスが存在するにもかかわらず、プログラムのパフォーマンスやサイズに悪影響はありません。

0

すべての唯一のデッドコードを決定することは、ほとんどの言語では再帰的に決めることができません(言語のような "数学の世界"を持つことを理想化する場合)。

関連する問題