German CPU-Ausnutzung

Filippo

Expert
Licensed User
Hallo,

kann mir jemanden sagen warum .Net oder Basic4ppc-Programme viel mehr CPU (Arbeitsspeicher) brauchen als C++ Programme?

Hier ein Beispiel mit zwei File-Explorer, den "Total Commander v2.5" und mein fgExplorer, wobei mein Programm im vergleich viel weniger kann.

Total Commander = 42 KB:)
fgExplorer= 1574 KB:(

Alles natürlich in leerlauf gemessen.


Vielen Dank schon in voraus.

Ciao,
Filippo
 

specci48

Well-Known Member
Licensed User
Hi Filippo,

ein kompiliertes C++ Programm bringt so ziemlich alles mit was es zu Laufen braucht und zwar auch genau nur das, wenn man eimal von möglichen Zusatzbibliotheken absieht. Außerdem ist es direkt lauffähig, da es genau für eine bestimmte Hardware-Umgebung kompiliert wurde.

Wenn eine .NET-Anwendung gestartet wird, muss diese zur Laufzeit vom JIT-Compiler (Just-In-Time-Compiler) beim jeweils ersten Zugriff von Klassen und Methoden für die aktuell vorgefundene Prozessor-Architektur in CPU-Anweisungen übersetzt (kompiliert) werden. Außerdem müssen alle referenzierten externen Assemblies geladen werden, denn die eigene .NET-Anwendung besteht ja zum größten Teil aus Aufrufen der Klassenbibliothek vom .NET Framework.
Dieser ganze "Aufwand" sorgt dafür, dass
a) das Starten einer .Net-Anwendung i.d.R. länger dauert
b) wesentlich mehr Arbeitsspeicher belegt wird

Im Gegenzug hat man aber den Vorteil, dass die Programmierung unabhängig von der Prozessor-Architektur erfolgen kann. Gerade wir mit Basic4ppc nutzen ja oftmals die Möglichkeit, quasi per Knopfdruck eine Desktop- und eine Device-Variante unserer Programme zu erzeugen.
Außerdem nimmt einem das Framework beim Programmieren etliche Arbeit ab, da man sich um viele Dinge (z.B. Speicherverwaltung, Dateihandling, ...) nicht so detailiert kümmern muss, wie es bei C++ Programmen notwendig ist.

Der gesamte Vergleich gilt übrigens analog für Java-Programme.


Gruß
specci48
 

Filippo

Expert
Licensed User
Hallo specci48,

vielen Dank für die Ausführliche Antwort.

Im Gegenzug hat man aber den Vorteil, dass die Programmierung unabhängig von der Prozessor-Architektur erfolgen kann. Gerade wir mit Basic4ppc nutzen ja oftmals die Möglichkeit, quasi per Knopfdruck eine Desktop- und eine Device-Variante unserer Programme zu erzeugen.
Außerdem nimmt einem das Framework beim Programmieren etliche Arbeit ab, da man sich um viele Dinge (z.B. Speicherverwaltung, Dateihandling, ...) nicht so detailiert kümmern muss, wie es bei C++ Programmen notwendig ist.
Du hast ja recht, es hat schon viele vorteile.

Stell dir aber jetzt vor es laufen 10 Basic4ppc-Anwendungen auf ein PPC, dann ist der Speicher ganz schnell voll, oder?
Na ja, man kann nicht alles haben.:sign0148:
 

specci48

Well-Known Member
Licensed User
Stell dir aber jetzt vor es laufen 10 Basic4ppc-Anwendungen auf ein PPC, dann ist der Speicher ganz schnell voll, oder?
Nein, denn der JIT-Compiler und die Klassenbibliotheken müssen ja nur ein einziges mal in den Speicher. Für weitere Programme muss dann nur der wesentlich kleinere .Net Programmcode der Anwendung geladen werden.

Und sofern der Arbeitsspeicher nicht anderweitig verwendet wird, bleiben die .Net Komponenten auch nach dem Programmende im Speicher erhalten. Somit erklärt sich auch der Effekt, das der erneute Start eines Programms (nach einem Programmende) oftmals spürbar schneller als beim ersten Aufruf erfolgt.

Na ja, man kann nicht alles haben. :sign0148:
Aber man kann immer noch das Beste aus dem Vorhandenen machen... ;)


Gruß
specci48
 
Top