WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   Wird C#-Code compiliert oder intepretiert? (http://www.wcm.at/forum/showthread.php?t=181040)

cenus 19.12.2005 17:47

Wird C#-Code compiliert oder intepretiert?
 
Hallo,

eine Frage. Wird C#-Sourcecode compiliert oder interpretiert? Andersrum gefragt. Wird der Sourcecode wie bei C++ compiliert und man erhält dann eine ausführbare Binärdatei oder wird vom Sourcecode eine Art Bytecode erstellt, wie bei Java, wo dann dieser Bytecode mittels Runtime interpretiert wird?

SourceGrabber 19.12.2005 18:37

Also ich bin jetzt kein Spezialist auf dem Gebiet, aber im Visual Studio kompiliere ich eigentlich alles, ob es jetzt eine Windows Applikation ist oder zB eine Webanwendung.

Aber ich schätz bei einer Webanwendung ist das eher so eine Art Zwischencode der vom IIS interpretiert wird.

delphirocks 19.12.2005 20:53

.NET wird "just in time" compiliert.
D.h. beim ersten Aufruf einer Funktion wird diese compiliert.

Vorteil beim "jitten" ist, daß sich der Compiler am aktuell verfügbaren Prozessor orientieren kann, deswegen wäre es theoretisch auch denkbar, daß .NET (oder auch Java) bei bestimmten Aufgabenstellungen schneller als nativ compilierter Code ist.

Nachteil ist allerdings, daß der erste Aufruf langsam ist, da ja erst compiliert werden muß.

Es gibt auch per "ngen" die Möglichkeit, die IL vorzukompilieren, sodaß dieser erste Overhead entfällt.

Das Einzige, was wirklich fehlt, ist ein Linker, der wirklich nur die Funktionen des Frameworks hinzufügt, die auch verwendet werden. D.h. du mußt immer das komplette Framework mitausliefern.

C# ist also eher vergleichbar mit Java als mit C++.

Nur daß es plattformabhängig ist...
(jaja, Mono, trotzdem)

mkay 19.12.2005 21:11

Also Kurz gesagt wenn du ein C# Programm erstellst wird die dll usw. in der Intermedia Language kompeliert. Der Vorteil ist dass jede .Net sprach in diese IL kompeliert wird und es so möglich ist dll's aus unterschieldichen sprach zu verwenden. der nachteil ist eben dass es nicht so schnell ist.
wenn du das programm ausführst wird die il vom just-in-time compiller, der im .Net Framework enthalten ist, in binären code übersetzt und das programm wird ausgeführt.

ich hoffe ich konnte dir helfen.

cenus 20.12.2005 08:01

Danke für die Informationen!

Dillinger 20.12.2005 08:14

wird das compilierungsergebnis irgendwo in einer datei gespeichert ? (die müsste ja dann auf rechnern mit gleicher cpu auch funktionieren)

delphirocks 20.12.2005 11:38

MSDN:

"The Native Image Generator creates a native image from a managed assembly and installs it into the native image cache on the local computer. The native image cache is a reserved area of the global assembly cache. Once you create a native image for an assembly, the runtime automatically uses that native image each time it runs the assembly. You do not have to perform any additional procedures to cause the runtime to use a native image. Running Ngen.exe on an assembly allows the assembly to load and execute faster, because it restores code and data structures from the native image cache rather than generating them dynamically."

Hab' das Ganze in der Praxis aber noch nicht ausprobiert oder benötigt.



Dillinger 20.12.2005 22:02

thx - und bis wann testest du es aus?
:-)

delphirocks 21.12.2005 07:17

Nächstes Jahr :-)

Biri 21.12.2005 09:15

hi,

ich würde mal sagen, dass man in 90% aller fälle, die vorkompilierung mit ngen nicht benötigt.
Programmaufruf ist ja nur beim 1. ausführen der betroffenen funktion langsamer, weil von IL in maschinencode übersetzt wird, dann nicht mehr.

@cenus: schau dir mal eine mit .net erzeugte .exe Datei im binäreditor an, was du siehst, ist IL code. (schaut teilw. ähnlich wie assembler aus)
-> wahre freaks schreiben ihre programme dann gleich in IL ;)

programme wie z.B. .net-reflector machen aus dem IL code wieder c#.
so kannst du dir anschaun, wie microsoft die funktionalitäten ihrer assemblies programmiert hat.

fg
-hannes


Alle Zeitangaben in WEZ +2. Es ist jetzt 16:49 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag