Phobos
✝
|
c# verwendet eine virtuelle maschine analog zu java -> folglich brauchst du die vm die bei c# imho VES heisst und im .net package dabei ist. danke das hat mich interessiert. offensichtlich sind einige neu-admins nicht in der lage "normale user" ernst zu nehmen
|
Oculus
void
|
aehm, nur zur info: beim compilieren wird der c# code in MSIL code übersetzt = microsoft intermediate language kann man mitn java byte-code vergleichen dieser code wird dann vom CLR = common language runtime in maschinennahen code übersetzt, der dann eben von der CLR ausgeführt wird. kein vergleich zur java-vm, da es sich bei der CLR dumm gesagt um einen geschützten speicher handelt -> managed code ausserdem übernimmt die CLR auch alle security-kontrollen übersetzung vom MSIL code geschieht bei der ersten anfrage, danach liegt der compilierte code + metadaten im assembly-cache des system aber eigentlich gehts ja um das tool
Bearbeitet von Oculus am 15.11.2003, 13:23
|
Ringding
Pilot
|
kein vergleich zur java-vm, da es sich bei der CLR dumm gesagt um einen geschützten speicher handelt -> managed code ausserdem übernimmt die CLR auch alle security-kontrollen Also genau wie bei Java.
|
Oculus
void
|
eben nicht java verwendet einen interpreter, der den byte-code interpretiert (duh!) MSIL code wird nicht interpretiert, sondern läuft annähernd native -> massiver performance-schub gegenüber java nachteil: bereits in MSIL compilierter code muss nochmals bei der ersten anfrage vom plattformabhängigen CLR-compiler übersetzt werden. dann ists nimma plattformunabhängig wobei sich die plattformunabhängigkeit beim .net eh auf intel, amd und alpha beschränkt
|
Ringding
Pilot
|
Hast du schon mal was von Java JIT Compilern gehört? EDIT: Ich mach meine Diplomarbeit über Java JIT Compilation, da kenn ich mich aus, das kannst mir glauben.
Bearbeitet von Ringding am 15.11.2003, 13:53
|
Oculus
void
|
glaub ich dir schon, dass du dich auskennst stimmt doch, dass der JIT den byte-code für die plattformabhängige java-VM kompiliert, damit dieser dann vom java-interpreter der VM ausgeführt werden kann, oder? edit: warum diskutieren wir jetzt über des? es geht um mein tool zur info: ich verwend den CodeDom-Namespace vom framework, mit dem man code zur laufzeit kompilieren und ausführen, speichern oder wwi kann. den code, den man in der commandline von meinem tool eingibt, wird in eine template-methode eingefügt, die dann vom tool aus aufgerufen wird. also hatman die beschränkung, dass man nur code wie im rumpf einer methode programieren kann. was aber für solch kleine testereien völlig ausreicht. brauchtman spezielle klassen, muss man sie halt vollqualifiziert angeben zb. System.IO.StreamReader oda System.Collections.ArrayList
Bearbeitet von Oculus am 15.11.2003, 18:55
|
Ringding
Pilot
|
Der Java Compiler (javac oder jikes) macht aus .java Files .class Files. Diese enthalten Bytecode für die VM. Die VM enthält entweder einen Interpreter oder einen JIT Compiler (oder beides) und führt den Bytecode aus. Im Falle des JIT Compilers bedeutet das, dass jede Methode, bevor sie ausgeführt wird, von Bytecode in Maschinencode (für die jeweilige CPU) übersetzt wird.
Bei .NET ist es genau gleich, nur dass die Dinge ein bisschen anders heißen.
|
that
Hoffnungsloser Optimist
|
Und wo ist jetzt der Sourcecode?
|
Oculus
void
|
Der Java Compiler (javac oder jikes) macht aus .java Files .class Files. Diese enthalten Bytecode für die VM. Die VM enthält entweder einen Interpreter oder einen JIT Compiler (oder beides) und führt den Bytecode aus. Im Falle des JIT Compilers bedeutet das, dass jede Methode, bevor sie ausgeführt wird, von Bytecode in Maschinencode (für die jeweilige CPU) übersetzt wird.
Bei .NET ist es genau gleich, nur dass die Dinge ein bisschen anders heißen. woher kommt dann der performancevorteil beim .net? (is jetzt als frage gemeint, und net als konter )
|
crashman
OC Addicted
|
woher kommt dann der performancevorteil beim .net? (is jetzt als frage gemeint, und net als konter ) eine blöde gegenfrage aber performancevorteil bei welcher anwendung ? Wenn ich c# oder java eine 3D engine programmier und sie in java mit 0.5 fps rennt aber in c# mit einem gehör ich trotzdem gehaut Sonst kann ich mir kaum eine anwendung vorstellen wo man einen performance unterschiede merken könnte. Das beim starten eine kleine verzögerung eintritt werte ich jetzt mal nicht als Performance nachteil.
|
Jedi
PROGrAMmER
|
mir war heut recht fad in da firma und da hab ich mir endlich ein kleines tool programmiert, was ich schon lang hätte brauchen können
einen kleinen code-tester wenn man also fragmente eines codes testen will, braucht man sich nimma extra a file schreiben und compilieren
keine ahnung, obs andere auch noch brauchen können für mich ists sehr hilfreich
programm ist selbsterklärend
für wünsche/anregungen/kritik bin ich grundsätzlich offen, solangs sie ungleich aussagen wie "wozu brauchtma das?" oder "bringt nix, so a schas" ist oh my fu***** god wozu gibts Unittests mit NUNIT? [sprich: enjunit] warum leicht, wenns auch ......
|
Jedi
PROGrAMmER
|
|
Ringding
Pilot
|
@crashman: Ich hab mal das Descent probeweise für .net compiliert, da ist es haargenau gleich schnell gelaufen wie native.
Leider weiß ich auch noch keine vernünftige Erklärung für den oft enormen Performanceunterschied / .NET. Es gibt durchaus Sachen, da ist Java auch recht schnell. .NET ist halt doch neuer und hat schon ein bisschen aus den Fehlern von Java gelernt und hat auch ein paar Tweaks und Möglichkeiten mehr eingebaut.
|
atrox
in fairy dust... I trust!
|
hier muß sun unbedingt aufholen - so wie .net von java gelernt hat, muß java von .net lernen.
|
Jedi
PROGrAMmER
|
nur dass SUN derzeit finanziell eher schlecht da steht ... :/
|