Ein Switch Statement dass die Werte so setzt wie sie kommen ist einfach nur unnötig.
Und natürlich ist es im Vergleich zu der anderen Version Performancelastig.
Es fällt nur nicht auf weil das Ding nicht bei jedem Frame durchrennt.
Nur weil die Compiler besser werden heißt es nicht dass Programmierer dümmer werden dürfen.
Sowas kommt dann dabei raus:
Und dann ohne default, damit auch SQLInjections direkt möglich sind
Ich habe nie behauptet dass das good practice ist, nur dass es in dem Fall, wie du auch selbst schon erörtert hast, nicht performancelastig ist.
Und ja, auf der Arbeit muss ich auch in java programmieren, aber das eher selten, sonst eher C# oder C++
Ich habe mich nicht wirklich mit dieser ganzen mikrooptimisierung auseinandergesetzt aber soweit ich weiß ist es in dem spezifischen fall nur 1-2 prozessorzyklen langsamer weil der stack einfach um den geswitchten wert erhöht wird, aber was weiß ich schon.
Wenn mir eine Baufirma sagt dass das Haus dass sie für mich bauten nur 1~2 Erdbebenstärken weniger aushält als es sollte, dass aber in dem speziellen Fall keine Rolle spielt, da in der Praxis ein Erdbeben dieser Stärke nicht geben wird -
Dann zweifle ich trotzdem daran den richtigen Weg gegangen zu sein.
Die Aussage "Es ist nicht optimal, aber das spielt keine Rolle" finde ich ziemlich gefährlich, da sich soetwas stark auf den späteren CodingStyle auswirken kann.
Gerade weil der Code nicht von einem Super1337 Pro geschrieben wurde finde ich WaneTrain's Anmerkung passend, denn Sie hilft dem Threadersteller seinen Code evtl. in Zukunft zu verbessern.
Eine Switch abfrage ist doch auf Compilier ebene genau das gleiche wie eine IF-Abfrage?
switch(x)
case y: a=0
case z: a=1
default: a=0
cmp x,y
mov a,0
cmp x,z
mov a,1
mov a,0
So müsste der das doch umsetzen?! (ka davon)
Bei WaneTrain seinem code wäre es einfach ein:
mov a,x
Also hätten wir 2 bis maximal 5 mal soviele Rechenschritte. OK Für den Prozessor sind das evtl. makrosekunden. Aber mach das im ganzen source an 10.000 stellen und wiederhole diese 10.000 Stellen 100.000x (vllt tackert ne while endlos durch?!).
Dann hast du 2.000.000.000 bis maximal 5.000.000.000 unnötige Rechenschritte.
Eine Switch abfrage ist doch auf Compilier ebene genau das gleiche wie eine IF-Abfrage?
switch(x)
case y: a=0
case z: a=1
default: a=0
cmp x,y
mov a,0
cmp x,z
mov a,1
mov a,0
So müsste der das doch umsetzen?! (ka davon)
Bei WaneTrain seinem code wäre es einfach ein:
mov a,x
Also hätten wir 2 bis maximal 5 mal soviele Rechenschritte. OK Für den Prozessor sind das evtl. makrosekunden. Aber mach das im ganzen source an 10.000 stellen und wiederhole diese 10.000 Stellen 100.000x (vllt tackert ne while endlos durch?!).
Dann hast du 2.000.000.000 bis maximal 5.000.000.000 unnötige Rechenschritte.
Das kommt auf den switch an. Da die Werte hier jeweils pro case inkrementiert werden kann der Compiler das besser umsetzen (stackpointer erhöhen) als wenn es sich nur um random werte wie 1 3 9 100 etc handeln würde.
Wir wissen alle, das die Switch-Anweisung unnötig ist.
Aber was macht ihr hier eigentlich für einen Aufstand?
Quote:
Originally Posted by Pumaaa
Gerade weil der Code nicht von einem Super1337 Pro geschrieben wurde finde ich WaneTrain's Anmerkung passend, denn Sie hilft dem Threadersteller seinen Code evtl. in Zukunft zu verbessern.
Du tust gerade so, als ob durch eine Switch-Anweisung die FPS im Client droppen würden.
Man sollte die Methode von WaneTrain nur dann verwenden, wenn man sich sicher ist das der Pointer wirklich vorhanden ist. Ansonsten bringt dir auch deine beste Performance-Programmierung nichts, weil der Client sonst abkackt.
@WaneTrain
Man sollte auch die Klammern richtig setzen, du castest (eindeutscht ischör) schließlich nicht den Int der durch GetCurSel() zurück gegeben wird, sondern einen Pointer der Klasse CWndBase(?) der durch GetDlgItem zurückgegeben wird, zu CWndComboBox.
Wir wissen alle, das die Switch-Anweisung unnötig ist.
Aber was macht ihr hier eigentlich für einen Aufstand?
Du tust gerade so, als ob durch eine Switch-Anweisung die FPS im Client droppen würden.
Man sollte die Methode von WaneTrain nur dann verwenden, wenn man sich sicher ist das der Pointer wirklich vorhanden ist. Ansonsten bringt dir auch deine beste Performance-Programmierung nichts, weil der Client sonst abkackt.
@WaneTrain
Man sollte auch die Klammern richtig setzen, du castest (eindeutscht ischör) schließlich nicht den Int der durch GetCurSel() zurück gegeben wird, sondern einen Pointer der Klasse CWndBase(?) der durch GetDlgItem zurückgegeben wird, zu CWndComboBox.
Du kannst aber grundlegen drauf Scheißen ob der Pointer Vorhanden ist, da der Client sowieso derber Dreck ist und Abkackt sobald GetDlgItem fehl schlägt.
Wenn man darauf gehen will das jeder Pointer immer Valid ist kann man gleich das Programmieren sein lassen, da dies nicht immer der Fall sein wird.
Das ist EIN (!) Case in der OnSnapshot Funktion, nun rechnest du nur noch 2 Pushes evtl. weg, dann ja..
Quote:
mov ecx, [ FFFFFF ]; //=> Pointer zu Option Class
mov edx, [ ecx + FF ]; //=> Offset zu Multi Lang
Das sind 2 Haupt sachen die schonmal bei JEDER Case anwensend sind, dann kommt davor EIN jmp, in jeder case, da er es aber in einer Switch Case bereits drin dürft ihr gleich mal das Doppelte rechnen.
Der jmp ist das "break" was dich zu dem Open Message Box bringt, anschließen kommt wegen der 1. Switch noch ein jmp zum ganzen ende, aus der Switch Case.
Prinzip hier nicht viel, dennoch recht lustig.
Ach und Mentus, die ober OnSnapshot funktion kommt im übrigen aus der Forsaken Neuz, dürftest auch mal was machen (ischör)
Du kannst aber grundlegen drauf Scheißen ob der Pointer Vorhanden ist, da der Client sowieso derber Dreck ist und Abkackt sobald GetDlgItem fehl schlägt.
Wenn man darauf gehen will das jeder Pointer immer Valid ist kann man gleich das Programmieren sein lassen, da dies nicht immer der Fall sein wird.
Ach und Mentus, die ober OnSnapshot funktion kommt im übrigen aus der Forsaken Neuz, dürftest auch mal was machen (ischör)
Das mit der Klammer kann jedem passieren.
Man kann definitiv nicht darauf "scheißen" ob ein Pointer vorhanden ist.
Mein Client Ingame Crasht nicht, wenn ich vorher das Control Abfrage. Das sind 2 Zeilen mehr + kein Crash.
Ich sag es mal so; Das Window Control muss vorhanden sein, sonst hat das Fenster nicht die volle Funktion. Deswegen ist es da noch verständlich so zu handeln, aber in anderen Situationen ist so etwas Gift für die Programmierung.
Ein Pointer muss valid sein, deswegen überprüft man sie. Wenn man sie trotzdem verwendet ist ende mit der Anwendung, sei es der WorldServer oder der Client oder auch andere Anwendungen.
Quote:
Originally Posted by Wanetrain
Ach und Mentus, die ober OnSnapshot funktion kommt im übrigen aus der Forsaken Neuz, dürftest auch mal was machen (ischör)
I don't understand why I have to login in-game to change the game language, do it properly and add an option in game launcher, it ONLY takes a few minutes...
Man kann definitiv nicht darauf "scheißen" ob ein Pointer vorhanden ist.
Mein Client Ingame Crasht nicht, wenn ich vorher das Control Abfrage. Das sind 2 Zeilen mehr + kein Crash.
Ich sag es mal so; Das Window Control muss vorhanden sein, sonst hat das Fenster nicht die volle Funktion. Deswegen ist es da noch verständlich so zu handeln, aber in anderen Situationen ist so etwas Gift für die Programmierung.
Ein Pointer muss valid sein, deswegen überprüft man sie. Wenn man sie trotzdem verwendet ist ende mit der Anwendung, sei es der WorldServer oder der Client oder auch andere Anwendungen.
.. und nun ?
Wobei er schon zu einem gewissen Punkt mit den Pointern recht hat, der Client hält teilweise nur zusammen weil diverse Dinge im Mempooler landen und Pointer auf (eigentlich) gelöschte Objekte noch vorhanden sind
Wenn man den Mempooler entfernt kann man durchaus auf diverse Programmierfehler stoßen, ist vielleicht ganz lustig.
Die Switch case Anweisung im DpClient habe ich mittlerweile auch ersetzt,
was für mich der ProgrammingFail 2k14 ist ist dass die NPC Dialoge ( Die Say/Speaks von den NPCs die in Flaris sichtbar sind ) jedesmal als Chat übertragen werden - und die Texte sind ja nicht gerade kurz.
Nutzloses Networking dass das ganze auch noch extrem unpraktisch für Multilanguage macht.
i need multilanguage for m2mnext 06/24/2014 - Metin2 Private Server - 0 Replies hi guys im a old m2m player m2m is closed magicto master is opened but i didnt like it .iwanna play m2m next but itd hungarian i need multi language or english patch or turkish plesa hp mee
sorry for my bad english
a
Interesse an Multilanguage 02/06/2014 - Metin2 Private Server - 1 Replies Hey Leute,
ich wollte mal Fragen, ob ihr ein beliebig erweiterbares Multilanguagesystem wollt.
Hierbei werden alle Clientside Sachen und Quests in der jeweilige eingestellten Sprache dargestellt.
Das könnte man sogar mit Drops machen.
MfG
[B]Bf4 Multilanguage dlc Key [S]Paysafecard 11/25/2013 - Trading - 10 Replies Hallo Leute,
Biete euch hier einen Bf3 Key an.
Preis ist verhandelbar.
Zahlungsmöglichkeit-
Paysafecard l Paypal.
PHP Multilanguage (Cookies)? 06/26/2013 - Web Development - 7 Replies Also ich habe eine Datei de_language.php und en_language.php beide haben die gleichen Arrays mit anderem Inhalt z.b.:
$lang = array(
'home' => 'Willkommen',
);
$lang = array(
[WTB]Metin2 MultiLanguage SF 06/12/2013 - Metin2 Private Server - 1 Replies Greatings,
So I've 100€, And I want to buy serverfiles of Metin2, fully costumized and With English Quests.
PM me with offers.