kostenloser Webspace werbefrei: lima-city


[C#] - MethodOverload oder optionale Parameter?

lima-cityForumProgrammiersprachenProgrammieren mit .NET & Mono

  1. Autor dieses Themas

    strange

    Kostenloser Webspace von strange

    strange hat kostenlosen Webspace.

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. t*****b

    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.
  4. Autor dieses Themas

    strange

    Kostenloser Webspace von strange

    strange hat kostenlosen Webspace.

    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
  5. Hallo strange,

    nachdem ich es selber nicht wusste habe ich mal folgenden Code durch den Profiler gejagt:
    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);
            }
        }
    }
    Die relevanten Zeilen des Ergebnisses sind diese:
    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%
    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.
  6. Autor dieses Themas

    strange

    Kostenloser Webspace von strange

    strange hat kostenlosen Webspace.

    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 ;)
  7. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!