ディレクティブを使用して不要なC#を削除する必要があるのはなぜですか?
-
02-07-2019 - |
質問
たとえば、ほとんど必要ありません:
using System.Text;
しかし、デフォルトでは常にそこにあります。コードに不要な usingが含まれている場合、アプリケーションはより多くのメモリを使用すると想定します。ディレクティブ。しかし、他に知っておくべきことはありますか?
また、同じusingディレクティブが1つのファイルとほとんど/すべてのファイルでのみ使用されている場合、何か違いがありますか?
編集:この質問は、ステートメントの使用。オブジェクトがスコープ外に出たときに、 IDisposable.Dispose メソッドが呼び出されます。 " using"の使用を参照してください。 C#で。
解決
プログラムを実行しても何も変わりません。必要なものはすべてオンデマンドでロードされます。そのため、そのusingステートメントがあっても、その名前空間/アセンブリで実際に型を使用しない限り、usingステートメントが関連付けられているアセンブリは読み込まれません。
主に、個人的な好みのためにクリーンアップするだけです。
他のヒント
コーディング設定以外に、使用されていない使用/名前空間を削除する理由は あります:
- プロジェクト内の未使用のusing句を削除すると、コンパイラが解決するルックアップタイプの名前空間が少ないため、コンパイルを高速化できます。 (これは、C#3.0の場合に特に当てはまります。拡張メソッドでは、コンパイラは、より良い一致、ジェネリック型推論、およびジェネリック型が関係するラムダ式について、エクステンションメソッドのすべての名前空間を検索する必要があるためです)
- 使用されるネームスペースの一部のタイプと同じ名前を持つ未使用のネームスペースに新しいタイプが追加された場合、将来のビルドで名前の衝突を回避できる可能性があります。
- コーディング時にエディターの自動補完リストの項目数が減り、タイピングの高速化につながる可能性があります(C#3.0では、表示される拡張メソッドのリストも減らすことができます)
未使用のネームスペースを削除しても実行されない:
- コンパイラの出力を何らかの方法で変更します。 コンパイルされたプログラムの実行を何らかの方法で変更します(読み込みが高速になるか、パフォーマンスが向上します)。
結果のアセンブリは、未使用の使用を削除しても削除しなくても同じです。
コードの清浄度は 重要です。
余分な使用を見ると、コードが維持されていない可能性があり、browfieldパス上にあると感じるようになります。本質的に、未使用のusingステートメントを見ると、脳の後ろに小さな黄色い旗が上がり、「注意して進めてください」と言ってきます。そして、量産コードを読むことは決してあなたにその感覚を与えるべきではありません。
使用をクリーンアップします。ずさんなことしないでください。自信を刺激します。コードをきれいにします。別の開発者にあたたかい気持ちを与えます。
using
に対応するILコンストラクトはありません。したがって、 using
ステートメントはアプリケーションメモリを増加させません。そのために生成されるコードまたはデータがないためです。
Using
は、コンパイル時に、短い型名を完全修飾型名に解決する目的でのみ使用されます。したがって、不必要な using
の唯一のマイナス効果は、コンパイル時間を少し遅くし、コンパイル中にもう少しメモリを消費することです。しかし、私はそれについて心配しません。
したがって、必要のない using
ステートメントを使用することの唯一の本当の悪影響は、インテリセンスにあります。
名前空間内の(未使用の)クラスのようにクラスを呼び出すと、名前の衝突が発生する場合があります。 System.Textの場合、" Encoder"という名前のクラスを定義すると問題が発生します。
とにかく、これは通常小さな問題であり、コンパイラによって検出されます。
アプリケーションはこれ以上メモリを使用しません。コンパイラがコードファイルで使用するクラスを見つけるために。きれいにならないことを超えて本当に害はありません。
主に個人的な好み。自分でそれらをクリーンアップします(Resharperは、文を使用して不要なものがあるかどうかを教えてくれます)。
コンパイルにかかる時間を短縮できるかもしれませんが、最近のコンピューターとコンパイラーの速度では、目に見えるほどの影響はありません。
余分な using
ディレクティブを残すことは問題ありません。それらを削除することには少しの価値がありますが、それほど価値はありません。たとえば、IntelliSenseの完了リストが短くなるため、ナビゲートしやすくなります。
コンパイルされたアセンブリは、無関係な using
ディレクティブの影響を受けません。
時々、それらを #region
に入れて、折りたたんだままにします。これにより、ファイルの表示が少しきれいになります。 IMO、これは #region
の数少ない優れた用途の1つです。
コードをクリーンに保ちたい場合、使用されていない using
ステートメントはファイルから削除する必要があります。コードを理解する必要がある共同チームで作業し、すべてのコードを維持する必要があると考え、コードを減らす=作業を減らす、メリットは長期的である場合、メリットは非常に明確に見えます。
これらは単にショートカットとして使用されます。たとえば、次のように書く必要があります。 System.Int32を使用するシステムがない場合は、毎回。上に。
未使用のものを削除すると、コードがきれいに見えるようになります。
usingステートメントを使用すると、使用する型を限定できなくなります。私は個人的にそれらをきれいにするのが好きです。実際には、locメトリックの使用方法によって異なります
実際に使用する名前空間のみを保持すると、コードを文書化しておくことができます。
検索ツールを使用して、コードのどの部分が互いに呼び出しているかを簡単に見つけることができます。
未使用のネームスペースがある場合、検索を実行するときにこれは何も意味しません。
現在、名前空間のクリーンアップに取り組んでいます。アプリケーションのどの部分が同じデータに何らかの方法でアクセスしているかを常に尋ねられるからです。
データアクセスがネームスペースで区切られているため、どの部分がデータにアクセスしているのかがわかっています。データベースを介して直接およびWebサービスを介して間接的に。
これを一度に行う簡単な方法は考えられません。
コードを(開発者にとって)ブラックボックスにするだけの場合は、問題ありません。しかし、長期にわたって維持する必要がある場合、他のすべてのコードと同様に貴重なドキュメントです。
「using」ステートメントは、識別子の名前を修飾するための単なるヘルパーであるため、パフォーマンスには影響しません。したがって、 System.IO.Path.Combine(...)と入力する代わりに、 Path.Combine(...)と入力するだけで済みます。 System.IOの使用。
コンパイラは、プロジェクトをビルドするときにすべてを最適化するために多くの作業を行うことを忘れないでください。これを使用することは多くの場所で使用されます。1をコンパイルすると、別のことは行われません。