不要な参照や使用があるとどうなりますか?


12

私は少しきちんとしたフリークで、using実際に使用されているものだけを保持するために各クラスの参照とsをクリーニングすることでプロジェクトを維持する傾向があります。

(OCDの神経を落ち着かせる以外に)必需品を守ることについて、他にどのような議論ができますか?私は主にシステム参照を考えています、カスタム作業への参照は多くの後方互換性の問題をもたらします。リリースのフットプリントは大きいですか?コンパイル時間は長くなりますか?


5
usingsとreferenceは同じものではないことに注意してください。答えの多くはそれを考慮に入れていません。
phoog

1
コードをきれいに保ち、最小限に使用したい場合は、ReSharperの購入を検討してください。Visual Studioのすばらしい拡張機能。なしではライブ/プログラミングはできません。;-)
アンデルス

回答:


13

IntelliSenseはusing、最小限に抑えると、非常に便利になります。これは大きな利点です。

それ以外は、利益があるとは思いません。したがって、C#コンパイラは、たとえば1%速く動作する可能性があります。だから何。


1
その1%の累積値は相当なものですが...しかし、基本的には、コンパイラーが問題を最適化することを期待します。しかし、単に整頓されていることに問題はありません
マーフ

とにかくC#IntelliSenseは、リストにすべてを完全にダンプし始めた2005年頃から少し面倒です。
宮坂

@ReiMiyasakaので、あなたが欲しい、その後やる何のためのIntelliSenseを取得することをCtrl+.「名前空間を追加クイックフィックスにXYZ
kizzx2

1
@Murph:1%の累積値がいくら大きくても、累積合計の1%のままであるため、常に重要ではありません。また、コンパイラはusing実際には不要であると判断するまでsを無視できませんが、最初にソースファイル全体をコンパイルしない限り、s は無視できません。プロジェクト参照と同様に、それらは使用されていないように見えるという理由だけで破棄されません。動的に(コンパイル時に検出できない)方法で使用される可能性があるためです。
マイクナキス

1
少し遅れましたが、私の場合、非常に限られたリソースのデバイス用のアプリを作成しています。不要な参照を追加すると、最終的なアプリケーションのサイズに影響します。そして、パッケージを配布して他のパッケージと競争しようとしますが、より大きなパッケージは、ユーザーにアプリをダウンロードするかどうかを再考させる可能性があります。
hmadrigal

9

Visual Studio(シンプルな右クリック)でこれを達成するのは事実上簡単なので、なぜそうしないのですか?

これはOccamのRazorと一致しており、単なる優れたエンジニアリングです。

それを行わなかった場合の結果については、他の開発者がプロ​​ジェクトを開こうとして、自分のコンピューターにないライブラリへの(未使用の)参照が含まれている場合にどうなるかを検討してください。貧しい開発者は、その未解決の参照が存在する理由とその対処方法を理解する必要があります。

必要に応じて、黄金律の観点から検討してください。コンピューターにはないライブラリへの参照が多く、なぜそこにあるのかわからなかったプロジェクトの開発を引き継ぎたいですか?


+1、ソリューション全体に対してこれを行うことができるアドインがあります。これはまた、ClojureScriptとGoogle Closureのビデオを思い出しました。典型的なWebページは約1MBであるため、プログラム全体の最適化が重要です。持っているのは良い習慣です-不要なものをきれいにする。
仕事

6

usingステートメントは、単にコンパイラーがクラスなどを完全に参照できるようにするためのものです。余分なusingステートメントは、コンパイル時間に大きな影響を与えません。

また、ランタイムは、実際に必要になるまで参照アセンブリをロードしないので、不必要な参照の悪影響はないと思います。

Reflectorのようなツールを使用する場合、これらの不要なビットの検出と削除はほとんど自動化できるため、これらのアクティビティに多くの時間を費やすのは無駄だと思います。たとえばusing、Reflectorライセンスの支払い以上に不要なステートメントを1〜2時間手動で削除します。また、他の多くの生産性向上機能が付属しています。


を使用したクリーニングはVS 2010の組み込み機能です(2008年もそうです)。また、ReSharperも参照を行うことができます。しかし、大規模なクリーンアップに着手する前に、ツールを使用してこれを行うことを検討しました。
MPelletier

+1は、未使用usingのsと未使用の参照の区別を明確に表現するためのものです。2つは非常に異なっています!
phoog

1

上記に加えて、ここではまだ言及していなかったと思いますが、各参照には.NETフレームワーク内または外部DLL内のコンポーネントが必要です。外部DLLを参照する場合、ソフトウェアを実行するとき(および実行する場所)にそれが必要になります。

編集-以下のphoogによる有効なコメントに従って:DLLが使用されていない場合でもアプリケーションは実行され、参照に追加されたという理由だけでアプリケーションと共に出荷する必要はありません。コード内の未使用の参照を処理するには、「未使用の参照の削除」をご覧ください


1
参照が使用されていない場合、いつ、どこでソフトウェアを実行するかはDLLを必要としません。
phoog

@phoog、コメントありがとう。少なくとも.NET VS2010では、ソリューションへの参照を手動で追加すると、コードでDLLを使用しなくてもDLLはbinフォルダーに物理的に追加されます。
NoChance

1
ただし、binフォルダーからDLLを削除した場合、またはDLLなしでアプリケーションを公開した場合、アプリケーションは引き続き実行されます。
phoog

@phoog、あなたは正しい、これを指摘してくれてありがとう。投稿を編集します。
NoChance
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.