36

I have a class library and am using only part of it. Is there a need to delete what isn't being used in order to shrink the size of the created code (in release configuration)?

As far as I've seen, the compiler takes care of that, and removing the code doesn't change the EXE file size. Will this always be true? Removing all unneeded code would take very long, so I want to know if there's need for that.

More information: there are methods and classes in the class library that aren't called from the executing code, but are referenced by other parts of code in the class library (which themselves are never called).

4

6 に答える 6

41

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

You can use a tool to help you find and remove unused methods (including ones only called by other unused methods). Try What tools and techniques do you use to find dead code? and Find unused code to get you started.

于 2012-04-17T13:24:52.767 に答える
6

それはすべてコンパイルされます。呼び出されるかどうかに関係なく。コードは外部ライブラリから呼び出される場合があります。

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

于 2012-04-17T13:25:29.917 に答える
0

コンパイラが何かを削除するのではないかと思います。実際、リフレクションのおかげで、型をインスタンス化し、メソッドを名前で呼び出すことができるため、コンパイラは何が使用され、何が使用されていないかを判断できません。

于 2012-04-17T13:25:02.673 に答える
0

と呼ばれるクラスライブラリがあるとしましょうUtility。新しいプロジェクトを作成し、このクラスライブラリをそのプロジェクトに追加しました。EXEがクラスライブラリから1〜2個のメソッドしか呼び出さない場合でも、参照されていないコードを削除することは決して良い考えではありません。

それは再利用可能性の原則に反するでしょう。EXEから参照されていないクラスがライブラリに存在するという事実にもかかわらず、プログラムのパフォーマンスやサイズに悪影響を与えることはありません。

于 2012-04-17T13:26:26.433 に答える
0

ほとんどの言語では、デッドコードのすべてを決定することは(言語のような「数学の世界」を持っているという理想化を行う場合)、再帰的に決定不可能です。(ブレイズ言語のようないくつかのまれなものが決定可能です。)

于 2015-06-24T15:42:38.917 に答える
0

「作成されたコードのサイズを縮小するために、使用されていないものを削除する必要がある」かどうかという質問に対して:これはネットワーク帯域幅を節約するためにのみ役立つと思います。未使用のコードを削除することは、読み込み速度などを改善するためにWebアプリケーションで重要です。

コードがexeまたはライブラリである場合、デッドコードを削除する唯一の理由は、コードの品質を向上させることです。2年後にあなたのコードを見ている誰かが、それが何をするのか疑問に思って頭を悩ませないようにするためです。

于 2018-12-03T23:12:43.477 に答える