2016-04-13 3 views
-4

Ich habe eine Codezeile in meinem Rasierer, der wie dieseWas ist schneller - ein String Split(). Enthält() in meinem Controller oder in Rasiermesser? ASP.Net MVC

@if(spaceEvent.RegisteredStudentIds.Split(',').Contains(@Model.MeStudentId)) { 
    // show some specific HTML 
} 

Wäre es schneller sein aussieht, wenn ich die Spaltung entfernt und führte sie in meinem Controller? Ich könnte sogar in der Lage sein, die .contains() in der Steuerung zu tun war gut! Oder ist es in diesem Fall sogar wichtig?

+1

Profil es. Sie haben auch unterschiedliche Funktionen. Splitting wird nicht mit 'Rob, ert 'übereinstimmen, wird nicht geteilt. – Rob

+2

Siehe: [Leistung rant] (https://ericlippert.com/2012/12/17/performance-rant/). Wenn Sie jedoch überprüfen möchten, ob eine große Zeichenfolge mindestens einmal eine kleinere Zeichenfolge enthält, können Sie überprüfen, ob [IndexOf] (https://msdn.microsoft.com/library/k8b1470s.aspx) null oder höher ist. (Weniger als Null bedeutet: nicht gefunden). – Corak

+2

Schneller ist nicht wichtig, es sei denn, Sie haben ein nachweisbares Leistungsproblem. Das heißt, Programmierung * Logik * sollte in der Steuerung und nicht in der Ansicht auftreten. –

Antwort

0

ja und nein! nein, weil die Split Overhead hat. Es sollte eine gründliche Zeichenkette durchlaufen, Zeichen finden, die mit Eingaben, Teilen und Machen übereinstimmen, und das Ergebnis-Array zurückgeben.

und ja, weil in einer großen Zeichenfolge (100MB zum Beispiel) die String.Contains 100M Zeichen gründlich durchlaufen sollte, vergleicht jedes durch erste Zeichen der Eingabe und nächsten Zeichen ... aber wenn Sie die 100M in 200K Wörter z. IEnumerable.Contains vergleicht das erste Wort mit der Eingabe, wenn das erste Zeichen nicht übereinstimmt, überspringt es andere Zeichen und geht zum nächsten Wort und geht 5 Zeichen später. In diesem Szenario wiederholt Schleife 200K (abhängig von Eingaben) zum Beispiel, die weniger als 100M ist!
Wenn Sie eine große Zeichenfolge haben und die Methode Contains mehrmals verwenden möchten, teilen Sie sie auf und speichern Sie das Ergebnis in einem Array. Verwenden Sie dann die Methode array.Contains.

Verwandte Themen