2016-07-17 10 views
-2

Frage 1:Ist es schneller zu finden, ob ein Buchstabe ein Buchstabe ist, oder Parse und Integer?

ich Textdateien nehme und sie in das richtige Format Formatierung ihre Daten zu verwenden. Das Problem ist, dass wenn eine Zeile mit einer Nummer beginnt, sie in der ersten Zeile darüber mit einem Namen (oder einem Satz von Buchstaben) stehen sollte. Also möchte ich wissen, ob es schneller ist, das erste Zeichen in der Zeile zu testen, um zu sehen, ob es ein int ist, indem es es analysiert und sieht, ob das nicht fehlschlägt, oder char.IsLetter, um zu sehen, ob es ein alphabetisches Zeichen ist? Ich nehme an, dass es bei einem gescheiterten Parser einen Overhead gibt, sogar bei einem Versuch, und die meisten Zeilen beginnen mit einem Buchstaben, also bin ich mir über die Geschwindigkeit nicht sicher.

Frage 2:

wenn char.IsLetter schneller ist, was wäre der einfachste Weg, Leerzeichen zu behandeln („“), die am Anfang von einigen Linien erscheinen? Ich weiß, dass int.Parse sie handhabt, also ist es schwerer herauszufinden, wie man damit umgeht, wenn das das erste Zeichen ist.

+3

Verglichen mit der Zeit, die benötigt wird, um Text aus einer Datei zu lesen, ist der Overhead einer dieser Dateien (Tryparse oder IsDigit usw.) wahrscheinlich irrelevant. Schreiben Sie den Code, der am einfachsten zu pflegen ist. Wenn Sie zu ernsthaften Leistungsproblemen kommen, profilieren Sie Ihren Code, um Hotspots zu finden, und probieren Sie andere Ansätze aus. –

+0

Es ist wirklich unklar, was Sie fragen. Es gibt kein leeres Zeichen. Bitte zeigen Sie einige Beispiel Eingabe und Ausgabe. Und sind Sie sicher, dass Sie nach dem "schnellsten" Weg suchen? Haben Sie diesen Teil Ihres Codes als Engpass erkannt? – CodeCaster

+0

@CodeCaster Ich könnte es dir nicht beschreiben. Wenn ich es aufzeichne, erscheint dieses Zeichen einfach als Leerstelle. Ich habe im Code nach Leerzeichen wie "" getestet, aber das behebt das Problem nicht und immer noch, aber eine einfache Leerzeile. Wenn ich nach "" ohne Leerzeichen suche und logge, wird das in den Protokollen angezeigt. – Alexandre

Antwort

1

Der für mich beste Weg ist:

if(Char.IsDigit(str.TrimStart(' ').FirstOrDefault())) 
{ 


} 

Der Overhead von try...catch mehr als den obigen Ansatz ist.

Ich denke, dass der beste Weg, um festzustellen, dass ist so schreiben Sie die beiden Methoden und wickeln Sie den Anruf mit einer Stoppuhr, um die Zeit von jedem zu messen. Ich denke nicht, dass der Unterschied signifikant ist.