[C#] - MethodOverload oder optionale Parameter?
lima-city → Forum → Programmiersprachen → Programmieren mit .NET & Mono
bestehen
code
double
effektivste danke
folgenden code
frage
geschwindigkeit
hinsicht
kleinen test
lesbarkeit
machen
methode
nummer
optionale parameter
parameter
performance
quellcode
speichern
strang
test
-
Moin,
aktuell bin ich grade dabei die ganze Nummer mit dem überladen von Methoden, bzw. optionalen Parametern, auseinander zu setzen und frage mich welche dieser Beiden Methoden nun eigentlich die bessere ist, in Hinsicht auf Speicher und Geschwindigkeit.
Vom Quellcode her sind die optionalen Parameter ganz klar im Vorteil, das ich nur noch eine Methode schreiben muss, aber ist sie auch die effektivste?
Danke schon mal für die Antworten, falls welche kommen :D
EDIT: Meine Frage hat sich erübrigt. Ein Überladen ist anscheinend ein wenig besser, zwar nicht für mich, da ich mehr Arbeit habe, aber man rennt am Ende nicht so schnell in Probleme.
EDIT2: Geht doch so wie ich mir das gedacht habe... also bleibt die Frage bestehen!
Beitrag zuletzt geändert: 20.9.2011 15:53:53 von strange -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Je nach Verwendungszweck natürlich. Soll eine Methode mit anderen Parametern einen komplett anderen Code ausführen, sollte man natürlich eine neue Methode schreiben. Wird aber nur Einfluss auf kleine Dinge (zB ein zwei Codeblocks mehr) genommen, verwendet man optionale Parameter.
-
Es geht mir eher darum ob es zwischen dem Überladen und den optionalen Parametern, einen Leistungsunterschied gibt, sowohl was den Speicher und die Geschwindigkeit anbelangt. Lesbarkeit und so weiter, ist mir nicht wirklich wichtig, habe da eh meinen ganz eigenen Stil (zumindest wenn ich alleine Arbeite) :D
-
Hallo strange,
nachdem ich es selber nicht wusste habe ich mal folgenden Code durch den Profiler gejagt:
Die relevanten Zeilen des Ergebnisses sind diese:using System; namespace PerformanceTest { class Test { public double Method1(double a, double b, double c, double d, double e, double f) { return a + b; } public double Method1(double a, double b) { return a + b; } public double Method2(double a, double b, double c = 0.0, double d = 0.0, double e = 0.0, double f = 0.0) { return a + b; } } class Program { static void Main(string[] args) { Test t = new Test(); for (int i = 0; i < 10000000; i++) t.Method1(i, 2 * i); for (int i = 0; i < 10000000; i++) t.Method2(i, 2 * i); } } }
D.h., dass es so gut wie keinen Performance-Unterschied macht (76 ms bei 10 Millionen aufrufen). Besonders wenn die Methoden mehr machen als eine simple Addition fällt das gar nicht mehr auf.Name Call Count Time spend Time(self) Time/Call Time(self)/call % of parent Thread#1960 100,00% PerformanceTest.Program.Main 1 4575,675120ms 2314,295669ms 4575,675120ms 2314,295669ms 92,59% PerformanceTest.Test..ctor 1 0,000661ms 0,000407ms 0,000661ms 0,000407ms 0,00% PerformanceTest.Test.Method1 10000000 1092,669534ms 1092,669534ms 0,000109ms 0,000109ms 23,88% PerformanceTest.Test.Method2 10000000 1168,709256ms 1168,709256ms 0,000117ms 0,000117ms 25,54%
-
Ok, 76ms bei 10Millionen Durchläufen ist fast nichts und vom Speicher her sollte es auch nicht wirklich extrem wichtig zu sein welche Variante man nun genau wählt. Danke für den kleinen Test ;)
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage