none
Frage zu statische Methoden RRS feed

  • Frage

  • Hallo,

    wollte fragen, ob bei den statischen Methoden durch gleichzeitigen Aufruf über mehrere Objekte Probleme geben würde? 

    Z.B. bei der folgende Methode:

    public static string getName(string name)
    {
         return "Mein Name ist: " + name;
    }



    Gruesse, NUNUI

    Dienstag, 27. Dezember 2016 10:05

Antworten

  • Hi,
    die Frage ist etwas unklar. Eine statische Methode gibt es in der Anwendung nur ein einziges Mal. Egal, wer sie aufruft oder von wo sie in der Anwendung aufgerufen wird, es wird immer der gleiche Code mit den beim Aufruf vorhandenen Werten abgearbeitet. Wenn es sich dabei um Werte aus formalen Parametern handelt (wie in Deinem Beispiel), dann wird bei jedem Aufruf auch dieser Wert genutzt. komplexer wird es, wenn die statische Methode andere statische Member (Felder, Eigenschaften) nutzt. Da kann es bei parallelem Aufruf zu Problemen kommen, die zu verhindern sind (z.B. Synchronisierung thread-übergreifender Zugriffe).

    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    • Als Antwort markiert Nunui Dienstag, 27. Dezember 2016 15:46
    Dienstag, 27. Dezember 2016 11:34

Alle Antworten

  • Hi,
    die Frage ist etwas unklar. Eine statische Methode gibt es in der Anwendung nur ein einziges Mal. Egal, wer sie aufruft oder von wo sie in der Anwendung aufgerufen wird, es wird immer der gleiche Code mit den beim Aufruf vorhandenen Werten abgearbeitet. Wenn es sich dabei um Werte aus formalen Parametern handelt (wie in Deinem Beispiel), dann wird bei jedem Aufruf auch dieser Wert genutzt. komplexer wird es, wenn die statische Methode andere statische Member (Felder, Eigenschaften) nutzt. Da kann es bei parallelem Aufruf zu Problemen kommen, die zu verhindern sind (z.B. Synchronisierung thread-übergreifender Zugriffe).

    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    • Als Antwort markiert Nunui Dienstag, 27. Dezember 2016 15:46
    Dienstag, 27. Dezember 2016 11:34
  • Da ich paar komplexere SQL-Abfragen mit verschiedene Datums habe, möchte Methoden schreiben, die als Parameter das gewünschte Datum bekommen und und die Abfrage als String zurückgeben.

    Da aber vorkommen kann, dass mehrere Objekte gleichzeitig die Abfrage machen und somit die Methode dann gleichzeitig aufrufen müssen.

    Daher auch meine Frage wäre, ob ich lieber jedes mal über einem Objekt die Methode aufrufe oder kann ich doch das Ganze auch über einer statischen Methode machen?

    Und so wie ich es aus deiner Antwort verstehe, kann ich es auch mit einer statischen Methoden machen, da die Methode mehrmals gleichzeitig aufgerufen werden kann und jedes mal abhängig vom datum einen anderen Wert liefert. 

    Habe ich es doch richtig verstanden, oder?

     

    Gruesse, NUNUI

    Dienstag, 27. Dezember 2016 15:59
  • Hi,
    wenn in einer statischen Methode keine anderen statischen Member (statische Felder oder statische Eigenschaften der Klasse) genutzt werden und nur die formalen Parameter genutzt werden, dann muss nur multi-threading berücksichtigt werden. D.h., wenn die statische Methode aus verschiedenen Threads aufgerufen wird, dann muss der Algorithmus threadsicher gemacht werden. Für Zugriffe auf den SQL Server kann das beispielsweise MARS erfordern. Auch müssen in diesem Fall für die Ergebnisse ggf. threadsichere Objekte genutzt werden.

    Man kann also Deine Frage nur für die Verarbeitung ohne Threads als "völlig problemlos" beantworten.

    Alternativ solltest Du überlegen, ob es nicht einfacher ist, anstelle Threads zu nutzen, mit async und await zu arbeiten.


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    Dienstag, 27. Dezember 2016 16:11
  • Danke für die ausführliche Antwort.

    Nein in der Methode sind keine andere statischen Variablen sondern nur Methodenparameter. Und die Abfragen werden nicht über Threads gemacht sondern asynchron!


    Gruesse, NUNUI


    • Bearbeitet Nunui Dienstag, 27. Dezember 2016 17:00
    Dienstag, 27. Dezember 2016 16:58