[C#/Java] Performance Vergleich

09/20/2013 00:40 Requi#1
Ich habe 2 vorgefertigte Privat Server Emulatoren für das Browsergame (Flash), Darkorbit.

Der eine in Java und der andere C#

Da die meisten Server große Verzögerungen haben, wollte ich fragen, was sich mehr lohnt.

Ist C# oder Java von der Performance besser?

Mfg
09/20/2013 00:42 Schlüsselbein#2
Lässt sich pauschal nicht sagen.
Quote:
Da die meisten Server große Verzögerungen haben, wollte ich fragen, was sich mehr lohnt.
Glaube nicht, dass die Verzögerungen an der Sprache liegen.
09/20/2013 00:43 c0w#3
kanns dir nicht sicher sagen, aber gehe stark davon aus dass allgemein (!) c schneller ist. is einfach ne recht fixe sprache =), in die meinung fließt auch die tatsache ein, dass jedes javaprogramm dass ich benutze echt endloss lahm is (eigentlich alles aus richtung oracle :O). aber in dem speziellen fall kommt natürlich auch dazu wie das ganze programmiert ist
09/20/2013 02:57 snow#4
Ich denke auch, dass man das pauschal nicht beantworten kann - hier kommt es auch sehr auf die Programmierung an.

Rein vom Gefühl her und ohne tieferes Hintergrundwissen würde ich sagen, dass C# beim identischen Code schneller ist, einfach weil MS das ordentlich optimieren wird, was bei Java so nicht möglich ist (UI Komponenten sind bei MS für eine Plattform optimiert, Java quält sich mit Swing und AWT rum). Ich lasse mich aber gerne belehren. :)
09/20/2013 03:44 tolio#5
^ gehe ich auch von aus, ich habe mich bisher zwar nur einseitig und zwar mit der clr beschäftigt aber das ist schon ziemlich stark optimiert; ms betriebsystem + ms technologie kann nicht so viel schief gehen ;)


@TE sonst einfach mit profilern testen, was wo wieviel zeit braucht und schauen obs am programm oder sonstigen resourcen liegt (IO, Netzwerk, etc)
09/20/2013 07:25 MrSm!th#6
Quote:
Originally Posted by Schlüsselbein View Post
Lässt sich pauschal nicht sagen.

Glaube nicht, dass die Verzögerungen an der Sprache liegen.
Doch. Java ist grauenhaft.
09/20/2013 09:16 dready#7
Das ganze ohne garantie weil ich mich gerad beim besten willen nichtmehr erinner wo die Infos jeweils herkamen.

Prinzipiel ist es so das die Java VM und der CLR Host in dier aktuellen Version jeweils relativ gleich auf sind. Bei Früheren .NET Versionen hatte Java die Nase vorne, heute kommt es massiv auf den ausgeführten Code an. Wenn ichs richtig im Kopf habe Inlined der CLR Host heute weniger dafür effizienter, während Java größere teile inlined dafür aber bei manchen am Ende langsamer rauskommt.

In sofern stimm ich Schlüsselbein zu das man nicht sagen kann einer wäre wirklich schneller, aber es gibt noch einen 2. Punkt an der ganzen Frage.

C# glänzt immer dann wenn es Dinge tut die auf Windows zugeschnitten wurden, da es von den hochoptimierten nativen Funktionen von Windows profitiert.

Zusätzlich gibt es einen ziemlich wichtigen Unterschied zwischen C# und Java, C# unterstüzt mit Unsafe Code etwas was extrem hilft will man Perfomanten Code schreiben. Z.b. bei Arrays die Boundingchecks zu umgehn oder ähnliches. Afaik ist das in Java nicht möglich.

Wenn ich irgendwo quatsch geschrieben hab sagts bitte ;)
09/20/2013 10:45 Schlüsselbein#8
Quote:
Originally Posted by MrSm!th View Post
Doch. Java ist grauenhaft.
Wobei dir auch niemand widerspricht (meine Meinung zu der Sache solltest du kennen).

Trotzdem bin ich mir sicher, dass Java bei dem Server nicht der Flaschenhals ist.

Mit den richtigen Algorithmen können beide Sprachen die oben genannten Anforderungen problemlos stemmen.
09/20/2013 17:42 MrDami123#9
Genau aus dem Grund, dass die Server ihre Verzögerung haben, musst du dir über die Ausführungsgeschwindigkeit deiner Programme keine Gedanken machen.
Wenn Serverkommunikation Sekunden dauern, kriegst du von Millisekunden nichts mit.

edit:
Ich gehe davon aus, dass du beide bereits getestet hast und nichts gemerkt hast, und nun hier frägst?
09/20/2013 17:46 qkuh#10
[Only registered and activated users can see links. Click Here To Register...]

Das ist natürlich schon einige Jahre her. Deswegen: Keine Gewähr :) Da wird sich bestimmt einiges getan haben.
09/20/2013 18:21 Requi#11
Quote:
Originally Posted by MrDami123 View Post
Genau aus dem Grund, dass die Server ihre Verzögerung haben, musst du dir über die Ausführungsgeschwindigkeit deiner Programme keine Gedanken machen.
Wenn Serverkommunikation Sekunden dauern, kriegst du von Millisekunden nichts mit.

edit:
Ich gehe davon aus, dass du beide bereits getestet hast und nichts gemerkt hast, und nun hier frägst?
Die Server sind noch nicht wirklich einsatzbereit.
Nur ich weiß nicht, an welchem ich nun arbeiten soll.

Die Sprache ist mir egal. Mir gehts um die Geschwindigkeit.

Und auf localhost kann man das schlecht testen, da dort alles "blitzschnell" ist.
09/20/2013 18:54 YatoDev#12
naja wenn der server später auf windows läuft würd ich mal sagen C# wenn nicht eher java wobei ich mir nicht vorstellen kann das eine von beiden irgendwie nachteilig langsamer ist
09/20/2013 19:05 Schlüsselbein#13
Nimm die robustere und sichere Implementation. Wie jetzt schon ein paar mal gesagt wurde, wird die Applikation 90% der Zeit nur damit beschäftigt sein, auf die ankommenden Daten zu warten bzw. selber welche zu schicken. Bei solchen I/O-lastigen Anwendungsgebieten kommt es auf die Geschwindigkeit der Sprache selber kaum an - weshalb auch Dinge wie twisted für Python existieren.
09/20/2013 19:13 MrDami123#14
Denke auch mit Server wirst du kaum Unterschiede bemerken.
Wenn du eine gewisse Anzahl an Spieler erreichst, wird es wichtig die Performance und die benötigten Ressourcen pro User zu kalkulieren.
Wenn eine der beiden Sprachen sparsamer ist als die andere, wirst du bei einer gewissen Anzahl an Spieler einen Unterschied in Geschwindigkeit merken.
Das ist selbstverständlich auch stark von dem Code abhängig der Vorliegt bzw. programmiert werden muss.

Wähl am besten die sparsamere Sprache und/oder die in der du besser und sparsamer Programmieren kannst.
09/20/2013 19:18 Requi#15
Wie gesagt, ist mir die Sprache total egal.
C# "kann" ich schon durch VB und ich habe auch ein Java Buch für Notfälle.

Mir kommt es nur auf die Performance an.

Wäre es schlau, jeden User, der connected, in einen neuen Thread zu packen?