2011-01-14 16 views
1

Wie wird die Größe eines C# -Programms gemessen?So messen Sie die Größe eines C# -Programms

Angenommen, ich habe

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

Wie man misst, wie viele Bytes das Programm genommen hat?

Dank

+7

Es würde helfen, wenn Sie definieren könnten, was "wie viele Bytes das Programm genommen hat" bedeutet an erster Stelle. Bevor Sie eine Menge messen können, müssen Sie sie definieren. –

+0

Müssen Sie die Größe des .NET-Frameworks berücksichtigen, auf das Ihr Programm angewiesen ist? –

+0

wird es besser – generaluser

Antwort

4

Dies gibt Ihnen die Größe des ausführbaren Programms in Bytes aus Ihrem Programm:

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

Ansonsten können Sie einfach in den Papierkorb-Ordner Ihrer ausführbaren Datei in Explorer durchsuchen und die Größe in Datei-Eigenschaften sehen.

4

es übersetzen und prüfen die Größe der kompilierte Datei?

0

Vielleicht würde so etwas funktionieren?

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

Dies funktioniert nur in Windows Forms. 'Assembly.GetEntryAssembly(). Location' funktioniert sowohl in Windows-Formularen als auch in WPF. – Yogesh

1

Wenn ein Programm kompiliert wird, wird es eine ausführbare Datei von einer bestimmten Größe sein. Je mehr Code, desto größer wird das Programm. Wenn Ihr Programm ausgeführt wird, ist die Größe normalerweise die Menge an Speicher, die es während seiner Operation verwendet.

Wenn das Programm ausgeführt wird, weist der Computer den Speicher dem Programm "load" zu. Dieser Ladeprozess benötigt ggf. andere .Net Framework-DLLs oder DLLs von Drittanbietern. Der Ladeprozess wird normalerweise eine ziemlich konsistente Menge an Speicher verbrauchen, wenn das Programm zum ersten Mal geladen wird. Wie viel Speicher hängt von der Programmgröße und dem Framework oder DLLs von Drittanbietern ab. .Net ist gut im Laden von Dingen JIT (Just in Time), was bedeutet, dass einige DLLs nicht geladen werden können, bis sie benötigt werden.

Während des Laufs des Programms wird .Net Elemente zuweisen, die auf den Stapel gelegt werden. Wenn sich Methode und Funktionen gegenseitig aufrufen, werden sie auf den Stapel gelegt, und wenn die Methoden- und Funktionsaufrufe beendet sind, wird der Stapel abgewickelt. Zum Beispiel kann eine rekursive Funktion sich 100-mal auf den Stapel setzen und schließlich den Speicher auslassen, wenn die Rekursion zu tief ist. Dieser "Stack" ist eine dynamische Zuweisung von Speicher und hängt von der Methode und den Funktionsaufrufen ab, die Ihre Anwendung ausführt. Je tiefer die Aufrufe sind, desto mehr Objekte befinden sich auf dem Stapel. Dies wirkt sich auf die Speichergröße des Programms aus.

Das andere Teil des Puzzles ist der Haufen. Dynamische Zuordnungen werden auf dem Heap platziert. Dies sind normalerweise Datenstrukturen, die Ihr Programm derzeit verwendet. Da .Net über eine Speicherbereinigung verfügt, muss sich der .Net-Programmierer nicht um diese Speicherverwaltung kümmern. Wenn Elemente auf dem Heap platziert und verwendet werden, wächst die Größe Ihres Programms (Speichernutzung), und dann überprüft die Garbage Collection gelegentlich, um Dinge zu bereinigen. Zum Beispiel könnten Sie ein Programm haben, das eine 1-Gig-XML-Datei in den Speicher einliest. Ihre Programmgröße ist vielleicht nur 30K, aber da die gesamte Datei in den Speicher eingelesen wurde, ist die Größe Ihres Programms jetzt über 1 Gig (Speicher). Man kann Tools verwenden, um die Speichernutzung eines Programms zu überwachen, um zu verifizieren, dass es angemessen funktioniert. Die meisten Dinge in .Net sind Garbage Collected, also muss man sich keine Gedanken über die "Größe" der Speicherzuweisung machen (es sei denn, Sie lesen wirklich große Dateien in den Speicher!), Aber nicht gemanagte Ressourcen müssen weiterhin berücksichtigt und bereinigt werden erforderlich. Beispiele für nicht verwaltete Ressourcen sind eine Datenbankverbindung, ein Dateihandle usw. Net C# hat eine nette USING-Anweisung, Dispose automatisch anzurufen, um nicht verwaltete Resoures zu handhaben (sofern IDisposable implementiert ist). Solange Sie also vorsichtig sind, sollte Ihr Programm frei von jeglichen sein verwaltete oder nicht verwaltete Lecks.

All diese Dinge tragen zur Kompilierzeit und zur Laufzeit zur Größe des Programms bei.Je größer und komplexer das Programm ist, desto größer ist die Größe auf der Festplatte und desto mehr Speicher wird zur Laufzeit benötigt.

Verwandte Themen