Ergebnis 1 bis 6 von 6
  1. #1
    Trojaner
    Registriert seit
    19.10.2011
    Beiträge
    54

    Standard [C#] Methoden mit ihren Instanzen

    Ich mache mir Gedanken über folgendes Thema:
    Wenn ich in C# eine Methode deklariere, die immer wieder aufgerufen werden soll kann ich das ja Statisch machen oder jedesmal eine neue Instanz erstellen. Wenn ich es Statisch mache bleiben die Werte im Speicher und ich benutze immer die selbe Instanz. Aber was ist wenn ich jedesmal eine neue Instanz aufmache (nicht statisch), wird jedesmal die alte Instanz überschrieben, wenn ich das richtig verstanden habe.
    Ich habe irgendwo aufgeschnappt, dass bei der nicht Statischen Lösung, die definierten Instanzen Fehler verursachen können.
    Was denkt ihr dazu oder habt ihr sogar ein Beispiel? Wäre hilfreich bei der Verbesserung meines Codes
    Danke!
    MfG dum091n


  2. #2
    CIH-Virus Avatar von krusty
    Registriert seit
    12.10.2008
    Beiträge
    445

    Standard

    Einige Klassen haben allgemeine Funktionen, die man auch ansprechen kann, ohne extra ein Objekt (eine Instanz) zu erzeugen.
    Ich kann zwar kein c#, aber in vb ist das ja nicht groß anders.
    In vb heißen sie nicht static, sondern shared function.
    Ein Beispiel:
    dim p as new Process = Process.GetProcessByName("bla")(0)
    Die Process Klasse hat eine shared Function, die alle Prozesse mit einem Namen auflistet, bzw ein Array mit Prozessobjekten zurückgibt.
    Diese Funktion kann direkt aus der Klasse aufgerufen werden, ohne eine Instanz zu erstellen.

    Ich wüsste nicht, warum es fehleranfällig sein sollte ein Objekt zu erstellen und dessen Methoden zu callen o_O.

    Wenn deine Klasse nur eine Funktion hat und du diese Funktion sehr oft brauchst, und jedes mal ein neues Objekt erstellst, dann müllst du dir natürlich den speicher zu.

  3. #3
    Richard Stallman Avatar von Sawyer
    Registriert seit
    26.07.2008
    Beiträge
    2.037

    Standard

    Normalerweise löscht der garbage collector das dynamische Objekt wieder sobald es nicht mehr benötigt wird. Von daher kann eigentlich gar kein Konflikt entstehen.

    MfG, Sawyer

  4. #4
    Trojaner
    Registriert seit
    19.10.2011
    Beiträge
    54

    Standard

    Das mit dem Garbage Collector dachte ich auch. Ich habe aber irgendwo aufgeschnappt, dass der gar nicht so toll sei und nicht so funktioniere wie von Microsoft versprochen und man deswegen niemals ein dynamisches Objekt für die selbe Funktion ein zweites mal aufrufen soll, weil sonst "Müllberge" entstehen.


  5. #5
    Coding Contest Winner
    Registriert seit
    21.03.2008
    Beiträge
    273

    Standard

    Von MSIL-Code-Seite her gesehn sollten die statischen Funktionen "sparender" sein, vorallem für den GC.

    Während bei einer Funktion mit einer Instanz immer erst das Objekt auf den Stack geladen wird bevor CallVirt aufgerufen wird, reicht beim statischen Objekt ein einfaches Call.

    Object.Dispose() wird aufgerufen sobald die Instanz nicht mehr gebraucht wird, vorallem bei lokalen Variablen ist das der Fall, also wenn eine Instanz innerhalb einer Scope erzeugt wird. Sobald die Scope wieder verlassen wird, wird das Objekt gelöscht.
    Die reine Funktion bleibt allerdings weiterhin im Speicher, in ihrer geJITTeten Form (in ASM-Code quasi). Also ist es egal ob Du die Funktion aus einer neuen Instanz oder statisch aufrufst, sie ist schon vorcompiled im Speicher und bleibt das auch. Also nix mit zumüllen etc ;-)

    Greez
    Gamehacking, Coding, Reversing and Security!
    Blog @easysurfer.me

  6. Folgende Benutzer haben sich für diesen Beitrag bedankt:

    dum091n (29.10.2011)

  7. #6
    Trojaner
    Registriert seit
    19.10.2011
    Beiträge
    54

    Standard

    Danke du hast ein tiefliegendes, psychisches Problem gelöst das mich seit Ewigkeiten beschäftigt Ist wichtig zu wissen denke ich, da Funktionen grundlegend sind.
    P.S.: Netter Blog

    ---------- Post added at 21:24 ---------- Previous post was at 21:23 ----------

    Danke du hast ein tiefliegendes, psychisches Problem gelöst das mich seit Ewigkeiten beschäftigt Ist wichtig zu wissen denke ich, da Funktionen grundlegend sind.
    P.S.: Netter Blog


Ähnliche Themen

  1. Womit würdet ihren euren PC ausstatten?
    Von td0s im Forum Kaufberatung
    Antworten: 19
    Letzter Beitrag: 12.09.2010, 21:01
  2. Auch die Sparkasse hat nun ihren Datenskandal
    Von wiZard im Forum Globale News / Szene News
    Antworten: 6
    Letzter Beitrag: 14.07.2009, 20:34
  3. [vTuT] sql injection union select - alle user mit ihren kenn
    Von HackTor25 im Forum Video-Tutorials
    Antworten: 3
    Letzter Beitrag: 27.01.2008, 12:14

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •