2 Stimmen

c# String Leistung - was ist schneller zu vergleichen, String Text oder String Länge

Ich muss eine riesige Xml-Datei lesen, die aus über 3 Millionen Datensätzen und über 10 Millionen verschachtelten Elementen besteht.

Natürlich verwende ich xmltextreader und habe meine Parsing-Zeit von früher 90 Sekunden auf etwa 40 Sekunden reduziert, indem ich mehrere Optimierungstricks und -tipps angewendet habe.

Ich möchte jedoch die Bearbeitungszeit so weit wie möglich reduzieren, daher die folgende Frage.

Viele Elemente sind vom Typ xs:boolean, und der Datenlieferant stellt die Werte immer als "wahr" oder "falsch" dar - nie als "1" oder "0".

Für solche Fälle war mein frühester Code:

if (xmlTextReader.Value == "true")
{
    bool subtitled = true;
}

die ich weiter optimiert habe:

if (string.Equals(xmlTextReader.Value, "true", StringComparison.OrdinalIgnoreCase))
{
    bool subtitled = true;
}

Ich wollte wissen, ob unten am schnellsten wäre (weil es entweder "wahr" oder "falsch" ist)?

if (xtr.value.length == 4)
{
    bool subtitled = true;
}

7voto

Giuseppe Accaputo Punkte 2632

Ja, es ist schneller, weil Sie nur genau einen Wert vergleichen, nämlich die Länge der Zeichenkette.

Wenn Sie zwei Zeichenketten miteinander vergleichen, vergleichen Sie jedes einzelne Zeichen, sofern die beiden Zeichen gleich sind. Wenn Sie also eine Übereinstimmung mit der Zeichenfolge "true" werden Sie 4 Vergleiche durchführen, bevor das Prädikat den Wert true .

Das einzige Problem, das sich bei dieser Lösung ergibt, ist, dass sich der Wert eines Tages von true auf, sagen wir 1 werden Sie hier auf ein Problem stoßen.

4voto

Alex Reitbort Punkte 13255

Der Vergleich der Länge ist schneller, aber weniger lesbar. Ich würde es nicht verwenden, es sei denn, ich erstelle ein Profil der Leistung des Codes und komme zu dem Schluss, dass ich diese Optimierung brauche.

3voto

Øyvind Skaar Punkte 2168

Wie wäre es, das erste Zeichen mit "t" zu vergleichen?

Sollte (vielleicht :) schneller sein als der Vergleich der gesamten Zeichenkette.

2voto

Patrick Punkte 961

Die Messung der Länge wäre fast ausnahmslos schneller. Abgesehen davon würde ich mich, sofern es sich nicht um ein Experiment zur Mikro-Optimierung handelt, darauf konzentrieren, dass der Code lesbar ist und die richtige Semantik vermittelt.

Sie könnten auch etwas Ähnliches mit folgendem Ansatz versuchen:

Boolean.TryParse(xmlTextReader.Value, out subtitled)

Ich weiß, dass das nichts mit Ihrer Frage zu tun hat, aber ich dachte, ich würde es trotzdem erwähnen.

0voto

femseks Punkte 2814

Können Sie nicht einfach einen Unit-Test schreiben? Führen Sie jedes Szenario zum Beispiel 1000 Mal aus und vergleichen Sie die Datenzeiten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X