4

C# では、using System.IOまたは使用したいその他の名前空間を記述します。

それは悪い習慣ですか、パフォーマンスやメモリに影響しますか?

それとも、それらのラッパー クラスを作成し、それを使用してどこでも同じ名前空間を使用しないようにするのがよいでしょうか?

4

5 に答える 5

2

.Net では、名前空間は常に各型の名前の不可欠な部分です。ただし、特定の型を宣言するたびに名前空間全体を指定する必要がある場合、コード内で膨大な繰り返しとノイズが発生します。これが using ディレクティブの目的であり、基本的にすべてのプレフィックスを 1 つの場所に折りたたんで、タイプの「最後の」セクションを指定します。これは、あいまいさがない場合にのみ実行できます。

ただし、コンパイラは上記を気にしません。usingしたがって、ディレクティブに依存する各型宣言がそのプレフィックスを取得するプリコンパイル段階が存在します。

だからあなたが言うとき:

Using System;

void foo()
{
   String s1 = "bla";
   String s2 = "bli";
}

プリコンパイルで何が起こるかというと、次のように、各宣言にSystem名前空間が追加されます。String

void foo()
{
   System.String s1 = "bla";
   System.String s2 = "bli";
}

そして今、コンパイラが実際に動き出します。

したがって、パフォーマンスについては、技術的には、ビルド プロセスのパフォーマンスに影響を与える可能性があります。using が多ければ多いほど、コンパイル前の段階でより多くのマッチングを行う必要があります。つまり、コンパイラはString. それは何Stringですか?System.Stringそれですか、SomeOtherNamespace.Stringそれともですか?実際に起こることは、コンパイラが使用中に見つけた各名前空間を型宣言に追加し、そのような型が存在するかどうかをチェックすることです。はいの場合 - すばらしい、いいえの場合 - 次の名前空間を試します。

したがって、未使用の宣言を含むファイルが多数ある場合using、コンパイラは必然的に冗長な作業を行います。極端な場合、ビルド自体のパフォーマンスが大幅に低下する可能性があります。

一般に、使用しているものを使用することを躊躇しないでください(しゃれは意図されていません)。ただし、不要なディレクティブの宣言は避ける必要usingがあります。これは、ビルド期間のパフォーマンスに影響を与える可能性がある (可能性は低い) だけでなく、コードをできるだけクリーンに保ちたいという理由からでもあります。

于 2012-09-08T16:37:51.357 に答える
0

System.IO を使用して配置すると、次のようになります。ファイルの先頭で、C# コンパイラに、クラス名の検索にその名前空間を考慮するように指示します。プログラムのパフォーマンスにはまったく影響しません。

ただし、同じファイルにラッパーを作成すると、使用するクラスごとに追加の (たとえそれが小さくても) クラスのコピーが作成され、実行時のパフォーマンスが低下します。

于 2012-09-08T16:43:39.587 に答える
0

コンパイラは、関連するものを含めるために最適化を行うため、最適化のためassemblies of namespaces where requiredのラッパーは必要ありません。クラスが必要とするすべての名前空間をusing statement on the top.

于 2012-09-08T16:17:19.427 に答える
0

使用できますが、パフォーマンスに影響を与えないことは重要ではありません (コードのベストプラクティスは、右クリックで使用しないで削除することです)

必要なときにすべてがロードされます。

于 2012-09-08T16:17:58.880 に答える