Laden...

Abprüfen mehrerer Bedinungen in einzelnen Threads?

Erstellt von SlyFox vor 10 Jahren Letzter Beitrag vor 10 Jahren 1.123 Views
S
SlyFox Themenstarter:in
231 Beiträge seit 2007
vor 10 Jahren
Abprüfen mehrerer Bedinungen in einzelnen Threads?

Hallo,

ich habe eine Funktion, die einen String auf bestimmte Zeichenfolgen prüft. Wenn eine dieser Bedinungen zutrifft, soll true zurück geliefert werden. Wenn keine Bedinungung zutrifft, dann false.

//Edit: true und false verwechselt

Macht es Sinn, die einzelnen Bedinungen parallel in Threads aufzuteilen, um die Performance zu steigern?

Hier der verkürzte Beispielcode:


        private bool Filtered(string s)
        {
            if (s.StartsWith("Closed session for "))
            {
                return true;
            }
            if (s.StartsWith("Opened session for "))
            {
                return true;
            }
            if (s.StartsWith("Starting replication with server "))
            {
                return true;
            }
            if (s.StartsWith("Finished replication with server "))
            {
                return true;
            }
            if ((s.StartsWith("Router: Transferred ")) && (s.Contains(" messages to ")))
            {
                return true;
            }
            return false;
        }

Vielen Dank für eure Hilfe

Christoph

A
350 Beiträge seit 2010
vor 10 Jahren

Ich finde sowas gehört zu den basics und du kannst mit dem ODER Operator arbeiten ||

Grüße

16.827 Beiträge seit 2008
vor 10 Jahren

Macht es Sinn, die einzelnen Bedinungen parallel in Threads aufzuteilen, um die Performance zu steigern?

Nein - ohne Wenn und Aber. Hier Parallelität einzuführen wird das ganze sogar langsamer machen; garantiert.

49.485 Beiträge seit 2005
vor 10 Jahren

Hallo SlyFox,

der Hinweis "premature optimization is the root of all evil" sollte hier nicht fehlen.

herbivore

1.346 Beiträge seit 2008
vor 10 Jahren

Das sieht so aus als würde die Methode sehr oft aufgerufen werden für viele Elemente. Du kannst das parallelisieren und die Elemente parallel abarbeiten, wenn du performance Probleme hast. Trotzdem hab ich noch 2 Anmerkungen zu deinem Beispiel Code.

Diese ganzen If Abfragen lassen sich sehr schön kurz als ein boolscher Ausdruck schreiben. Etwa so:


        private bool Filtered(string s)
        {
            return s.StartsWith("Closed session for ")
            || s.StartsWith("Opened session for ")
            || s.StartsWith("Starting replication with server ")
            || s.StartsWith("Finished replication with server ")
            || (s.StartsWith("Router: Transferred ") && s.Contains(" messages to "));
        }

Das machts etwas lesbarer. Dann noch eine Sache. Ich würde mir überlegen die Methode umzubennenen. Mir z.B. ist nicht klar was sie tut. Ist sie true, wenn ein Element in der Auflistung sein soll, oder ist sie true wenn nicht, also filtert sie raus?