2011-01-14 7 views
1

C#プログラムのサイズを測定する方法は?C#プログラムのサイズを測定する方法

は、私はプログラムが取られたバイト数を測定する方法

class Program 
    { 
     static void Main(string[] args) 
     { 
      Console.WriteLine("Hello World"); 
      Console.ReadKey(true); 
     } 
} 

があると?

おかげ

+7

「プログラムが何バイトを取ったか」というのは、最初に何を意味するのかを定義できれば助けになります。数量を測定する前に、数量を定義する必要があります。 –

+0

あなたのプログラムが依存している.NET Frameworkのサイズを考慮する必要がありますか? –

+0

これは良いでしょう – generaluser

答えて

4

これはあなたのプログラムの実行可能プログラム内部からのバイト単位でのサイズを与える:

FileInfo fi = new FileInfo(Assembly.GetEntryAssembly().Location); 
Console.WriteLine(fi.Length); 

そうでなければ、あなただけのエクスプローラで実行可能ファイルのbinフォルダを参照し、ファイルのプロパティでサイズを確認することができます。

4

それをコンパイルし、コンパイルされたファイルのサイズをチェック!

0

多分このようなものが動作するでしょうか?

FileInfo fInfo = new FileInfo(Application.ExecutablePath); 
long size = fInfo.Length; 
MessageBox.Show(size.ToString()); 
+2

これはWindowsフォームでのみ機能します。 'Assembly.GetEntryAssembly()。Location'は、ウィンドウフォームとWPFの両方で動作します。 – Yogesh

1

プログラムをコンパイルすると、特定のサイズの実行可能ファイルになります。より多くのコードは、プログラムが大きくなります。あなたのプログラムが実行されるとき、そのサイズは通常、それが動作中に使用しているメモリの量です。

プログラムが実行されると、コンピュータはプログラムをロードするためにメモリを割り当てます。このロードプロセスでは、必要に応じて他の.NetフレームワークDLLまたはサードパーティDLLが必要になる場合があります。プログラムが最初にロードされるとき、ロードプロセスは通常、かなり一定量のメモリを消費します。どのくらいのメモリがプログラムのサイズとフレームワークまたはサードパーティのDLLに依存するか。 .NetはJIT(Just In Time)というものを読み込むのがうまくいきます。これは、いくつかのDLLが必要になるまでロードされないことを意味します。

プログラムの実行中、.Netはスタックに移動するためのアイテムを割り当てます。メソッドと関数が互いに呼び出すと、それらはスタックに置かれ、メソッドと関数の呼び出しが終了すると、スタックは巻き戻されます。たとえば、再帰関数はスタックに100秒以上置かれ、再帰が深すぎるとメモリ不足になります。この「スタック」はメモリの動的割り当てであり、アプリケーションが行うメソッドと関数の呼び出しに依存します。コールが深いほど、スタック上にあるアイテムが多くなります。これは、プログラムによって使用されるメモリのサイズに影響します。

パズルのもう片方がヒープです。動的割り当てはヒープに配置されます。これらは通常、プログラムが現在使用しているデータ構造です。 .Netはガベージコレクションを持っているので、.Netプログラマはこのメモリ管理について心配する必要はありません。アイテムがヒープ上に置かれて使用されると、プログラムのサイズ(メモリ使用量)が増え、ガーベジコレクションが頻繁にチェックされてクリーンアップされます。たとえば、1ギガバイトのXMLファイルをメモリに読み込むプログラムがあるとします。あなたのプログラムのサイズは30Kに過ぎないかもしれませんが、ファイル全体がメモリに読み込まれているので、プログラムのサイズは今や1ギガバイト(メモリワイズ)を超えています。ツールを使用して、プログラムのメモリ使用状況を監視し、ツールが適切に動作していることを確認できます。 .Netのほとんどのものはガベージコレクトされているので、メモリの "サイズ"を心配する必要はありません(本当に大きなファイルをメモリに読み込まない限り!)が、管理されていないリソースは、必要です。管理されていないリソースの例は、データベース接続、ファイルハンドルなどです.Net C#は、管理していないリソースを処理するためにDisposeを自動的に呼び出すための素晴らしいUSING文を持っています(IDisposableが実装されています)管理されたリークまたはアンマネージドリーク。

これらはすべて、コンパイル時および実行時のプログラムのサイズに貢献します。プログラムが大きく複雑になるほど、ディスク上のサイズが大きくなり、実行時のメモリ使用量が増えます。

関連する問題