4

私はコードを持っていると言う

using System;
using System.Windows.Forms;

class TestApp
{
   static void Main()
   {
     Console.WriteLine("Testing! 1, 2, 3");
     MessageBox.Show("Hello...");
   }
}

using System&は実行時にすべてのタイプ (それらの名前空間内) をロードするSystem.Windows.Formsことを意味しますが、コンソールに印刷してメッセージボックスを表示するためだけに使用していますか?

また、実行時にこれらの必要なタイプ( Console& )をロードするために消費されるメモリがあります...MessageBox

Console[そして、ソース コードによってまだ使用されていない(内の) コード ブロックがいくつかありますが、それでもロードされますか? ]

そのため、舞台裏で何が起こっているかについての手がかりがあれば(少なくとも上記の10行のコードについては)役に立ちます...

4

2 に答える 2

7

usingステートメントはコンパイル時のみのステートメントであり、使用するたびに完全修飾名を指定せずにコンパイラーが参照された型を見つけることを可能にします。同じ型を直接参照した場合にロードされないものを実行時にロードしません

于 2013-07-25T05:16:19.703 に答える
0

はい、名前空間に直接すべての型があるため、サブ名前空間からは何もありません。これは、多くの using があるとコンパイル時間が長くなることを意味します。しかし、それまでに using がなくなり、すべての名前空間の使用が型への直接参照に変換されているため、実行時には影響しません。

※「シンボルを読み込む」と書いてある部分のことで、必ずしもそうしなくてもいいです。したがって、私の仕事での大きな解決策は、すべてのシンボルをロードするのに 30 秒かかりますが、シンボルをリロードする必要がないため、ほとんどのコンパイルは非常に高速です。

edit @xCoder: これは、アセンブリの動作に関係しています。クラスはなく、データのみです。したがって、高水準言語を使用するクラスは、クラスがデータを異なる方法で処理するため、それぞれ異なるアセンブリ コードにコンパイルされます。C# はアセンブリの代わりに IL を使用しますが、よくわかりませんが、おそらく同様に機能します。

于 2013-07-25T05:26:13.407 に答える