web-dev-qa-db-ja.com

ディレクティブを使用して不要なC#を削除する必要があるのはなぜですか?

たとえば、私はほとんど必要ありません:

using System.Text;

しかし、デフォルトでは常にそこにあります。コードに不要な sing directives が含まれている場合、アプリケーションはより多くのメモリを使用すると思われます。しかし、私が知っておくべきことは他にありますか?

また、同じusingディレクティブが1つのファイルとほとんど/すべてのファイルで使用されている場合、それはまったく違いがありますか?


編集:この質問は、オブジェクトがスコープから外れたときにリソースを管理できるように設計された ステートメントを使用 と呼ばれる無関係な概念に関するものではないことに注意してください。その IDisposable.Dispose メソッドが呼び出されます。 C#での「使用」の使用を参照してください

212
steffenj

プログラムを実行しても何も変わりません。必要なものはすべてオンデマンドでロードされます。そのため、そのusingステートメントがある場合でも、その名前空間/アセンブリで実際に型を使用しない限り、usingステートメントが関連付けられているアセンブリは読み込まれません。

主に、個人的な好みのためにクリーンアップするだけです。

177
Darren Kopp

areコーディング設定以外に、未使用のusing/s/namespacesを削除するいくつかの理由があります:

  • プロジェクト内の未使用のusing句を削除すると、コンパイラが解決するルックアップタイプの名前空間が少なくなるため、コンパイルを高速化できます。 (これは、C#3.0の場合に特に当てはまります。これは、コンパイラが拡張メソッドのすべての名前空間を検索して、一致の可能性、ジェネリック型推論、およびジェネリック型が関係するラムダ式を探す必要があるためです)
  • 使用されるネームスペースの一部のタイプと同じ名前を持つ未使用のネームスペースに新しいタイプが追加される場合、将来のビルドで名前の衝突を回避するのに役立つ可能性があります。
  • コーディング時にエディターのオートコンプリートリストの項目数を減らし、タイピングの高速化につながる可能性があります(C#3.0では、表示される拡張メソッドのリストも減らすことができます)

未使用の名前空間を削除することwo n'tすること:

  • コンパイラの出力を何らかの方法で変更します。
  • コンパイルされたプログラムの実行を何らかの方法で変更します(高速なロード、またはパフォーマンスの向上)。

結果のアセンブリは、未使用の使用を削除しても削除しなくても同じです。

467
Pop Catalin

コードの清潔さ  重要。

余分な使用を見ると、コードが維持されていない可能性があり、browfieldパス上にあると感じるようになります。本質的に、未使用のusingステートメントを見ると、脳の後ろに小さな黄色い旗が上がり、「注意して進めてください」と言ってきます。そして、量産コードを読むことは決してあなたにその感覚を与えるべきではありません。

そのため、使用をクリーンアップしてください。ずさんなことしないでください。自信を刺激します。コードをきれいにします。別の開発者にあたたかいあいまいな感じを与えます。

36
core

usingに対応するILコンストラクトはありません。したがって、usingステートメントは、アプリケーションメモリを生成しません。コードやデータは生成されないためです。

Usingは、短い型名を完全修飾型名に解決する目的でのみコンパイル時に使用されます。したがって、不必要なusingが持つ可能性のある唯一の悪影響は、コンパイル時間を少し遅くし、コンパイル中にもう少しメモリを消費することです。しかし、私はそれを心配しません。

したがって、必要のないusingステートメントを使用することによる唯一の本当の悪影響は、インテリセンスにあります。入力中の補完候補のリストが増えるためです。

30
Franci Penov

名前空間内の(未使用の)クラスのようにクラスを呼び出すと、名前の衝突が発生する場合があります。 System.Textの場合、「Encoder」という名前のクラスを定義すると問題が発生します。

とにかく、これは通常小さな問題であり、コンパイラによって検出されます。

4
Pablo Fernandez

余分なusingディレクティブを残すことは問題ありません。それらを削除することには少しの価値がありますが、それほどではありません。たとえば、IntelliSenseの補完リストが短くなり、ナビゲートしやすくなります。

コンパイルされたアセンブリは、無関係なusingディレクティブの影響を受けません。

時々、それらを#regionの中に入れて、折りたたんだままにします。これにより、ファイルの表示が少しきれいになります。 IMO、これは#regionの数少ない優れた用途の1つです。

2
Jay Bazuzi

アプリケーションはこれ以上メモリを使用しません。コンパイラがコードファイルで使用するクラスを見つけるために。それは本当にきれいでないことを超えて本当に痛いことはありません。

2
mattlant

主に個人的な好みです。私は自分でそれらをクリーンアップします(Resharperは、不要なステートメントを使用している場合に私に伝えるのに良い仕事をしています)。

コンパイルにかかる時間を短縮できるかもしれませんが、最近のコンピューターとコンパイラの速度では、目に見えるほどの影響はありません。

2
Josh Sklare

コードをクリーンに維持する場合は、使用されていないusingステートメントをファイルから削除する必要があります。コードを理解する必要がある共同チームで作業し、すべてのコードを維持する必要があると考え、コードを減らす=作業を減らすと、メリットは非常に明確になります。メリットは長期的です。

2

Usingステートメントを使用すると、使用する型を限定できなくなります。私は個人的にそれらをきれいにするのが好きです。実際には、locメトリックの使用方法によって異なります

1
CheeZe5

それらは単にショートカットとして使用されます。たとえば、使用するシステムがない場合は、毎回System.Int32を記述する必要があります。上に。

未使用のものを削除すると、コードがきれいに見えるようになります。

1
Carra

実際に使用する名前空間のみを持つことで、コードを文書化しておくことができます。

検索ツールを使用して、コードのどの部分が互いに呼び出しているかを簡単に見つけることができます。

未使用のネームスペースがある場合、検索を実行するときに何も意味しません。

アプリケーションのどの部分が同じデータに何らかの方法でアクセスしているのかを常に尋ねられるため、現在ネームスペースのクリーンアップに取り組んでいます。

名前空間で区切られたデータアクセスにより、どの部分がどの方法でデータにアクセスしているのかがわかります。データベースを介して直接およびWebサービスを介して間接的に。

これを一度に行う簡単な方法は考えられません。

コードを(開発者にとって)ブラックボックスにしたいだけであれば、問題ありません。しかし、長期にわたって維持する必要がある場合、他のすべてのコードと同様に貴重なドキュメントです。

1

「using」ステートメントは、識別子の名前を修飾するための単なるヘルパーであるため、パフォーマンスには影響しません。したがって、System.IO.Path.Combine(...)と入力する代わりに、単にPath.Combine(...)と入力できます。 System.IOを使用

0
Jordan Parmer

コンパイラは、プロジェクトをビルドするときにすべてを最適化するために多くの作業を行うことを忘れないでください。それを使用することは多くの場所で使用されます。1をコンパイルすると、別のことを行うべきではありません。

0