230

たとえば、私はめったに必要ありません:

using System.Text;

ただし、デフォルトでは常に存在します。コードに不要なusingディレクティブが含まれている場合、アプリケーションはより多くのメモリを使用すると思います。しかし、他に知っておくべきことはありますか?

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


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

4

14 に答える 14

491

コーディングの好み以外にも、未使用の using(s)/namespace を削除する理由いくつかあります。

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

未使用の名前空間を削除してもできないこと:

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

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

于 2008-09-25T22:39:58.933 に答える
185

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

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

于 2008-09-25T21:31:32.687 に答える
38

コードのクリーン度重要です。

余分な使用法が見られると、コードが保守されておらず、ブロウフィールド パス上にある可能性があると感じ始めます。要するに、未使用の using ステートメントを目にすると、脳の奥に小さな黄色のフラグが立ち、「注意して続行する」ように伝えます。そして、製品コードを読んでも、決してそのような感覚を覚えてはいけません。

だからあなたの使用法をきれいにしてください。だらしなくしないでください。自信を刺激します。コードをきれいにします。別の開発者に、あたたかいファジー感を与えます。

于 2008-09-25T22:35:50.300 に答える
30

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

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

したがって、必要のないステートメントを持つことによる唯一の実際のマイナス効果は、using入力中に補完される可能性のある一致のリストが増加するため、IntelliSense です。

于 2008-09-25T21:35:58.433 に答える
4

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

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

于 2008-09-25T21:36:23.283 に答える
2

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

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

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

于 2008-09-25T22:07:05.533 に答える
2

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

于 2008-09-25T21:31:47.287 に答える
2

主に個人的な好みです。私はそれらを自分でクリーンアップします(ReSharperは、不要なusingステートメントがある場合にそれを教えてくれます)。

コンパイルにかかる時間が短縮される可能性があると言えますが、最近のコンピューターとコンパイラーの速度では、知覚できるほどの影響はありません。

于 2008-09-25T21:34:25.503 に答える
1

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

未使用のものを削除すると、コードがすっきりと見えます。

于 2008-09-25T21:35:19.043 に答える
1

using ステートメントは、使用する型を修飾できないようにするだけです。私は個人的にそれらをきれいにするのが好きです。実際には、loc メトリックの使用方法に依存します

于 2008-09-25T22:15:45.420 に答える
1

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

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

未使用の名前空間がある場合、検索を実行しても意味がありません。

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

データベースを介して直接アクセスしたり、Web サービスを介して間接的にアクセスしたりするなど、名前空間によってデータ アクセスが分離されているため、どの部分がそれぞれの方法でデータにアクセスしているかがわかります。

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

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

于 2014-02-25T13:52:42.953 に答える
0

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

于 2008-09-25T21:32:06.460 に答える
0

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

于 2008-09-25T21:32:20.780 に答える