Schnellste Methode zum entfernen von chars aus dem string
Ich habe einen string, aus dem ich zu entfernen folgenden char: '\r', '\n' und '\t'.
Ich habe versucht, drei verschiedene Wege, um diese zu entfernen char und getestet Sie, so kann ich Holen Sie sich die Schnellste Lösung.
Folgenden sind die Methoden und es Ausführungszeit, wenn ich lief Sie 1000000 mal:
Sollte es werden Schnellste Lösung, wenn ich 1 oder 2 char zu entfernen. Aber als ich in char mehr, es beginnt zu mehr Zeit in Anspruch nehmen
str = str.Replace("\r", string.Empty).Replace("\n", string.Empty).Replace("\t", string.Empty);
Ausführungszeit = 1695
Für 1 oder 2 char, das war langsamer als String.Ersetzen, aber für 3 char es zeigte sich eine bessere Leistung.
string[] split = str.Split(new char[] { '\t', '\r', '\n' }, StringSplitOptions.None);
str = split.Aggregate<string>((str1, str2) => str1 + str2);
Ausführungszeit = 1030
Die langsamste von allen, sogar mit 1 char. Vielleicht ist mein regulärer Ausdruck nicht der beste ist.
str = Regex.Replace(str, "[\r\n\t]", string.Empty, RegexOptions.Compiled);
Execution time = 3500
Dies sind die drei Lösungen, die ich kam mit. Gibt es eine bessere und schnellere Lösung, dass hier jemand weiß, oder irgendwelche Verbesserungen kann ich in diesem code?
String, dass ich für benchmarking:
StringBuilder builder = new StringBuilder();
builder.AppendFormat("{0}\r\n{1}\t\t\t\r\n{2}\t\r\n{3}\r\n{4}\t\t\r\n{5}\r\n{6}\r\n{7}\r\n{8}\r\n{9}",
"SELECT ",
"[Extent1].[CustomerID] AS [CustomerID], ",
"[Extent1].[NameStyle] AS [NameStyle], ",
"[Extent1].[Title] AS [Title], ",
"[Extent1].[FirstName] AS [FirstName], ",
"[Extent1].[MiddleName] AS [MiddleName], ",
"[Extent1].[LastName] AS [LastName], ",
"[Extent1].[Suffix] AS [Suffix], ",
"[Extent1].[CompanyName] AS [CompanyName], ",
"[Extent1].[SalesPerson] AS [SalesPerson], ");
string str = builder.ToString();
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist die uber-schnell unsichere version, version 2.
Und hier sind die benchmarks (time to strip 1000000 strings in ms)
Ich glaube, Sie bekommen die bestmögliche Leistung durch das zusammensetzen von den neuen string als char-array und nur diese in einen string umwandeln, wenn Sie fertig sind, in etwa so:
EDIT: Zeichenfolge verwenden(s2, 0, i2) statt Trim(), pro Vorschlag
könnte Ihnen eine performance-Steigerung gegenüber der Verwendung
Aggregate()
seitJoin()
ist speziell für strings.BEARBEITEN:
Tatsächlich, das könnte noch besser sein:
Durchlaufen der Schnur und mit (nur einer) StringBuilder (mit dem richtigen argument im Konstruktor, um zu vermeiden, unnötige Speicher-Allokationen), um erstellen Sie eine neue Zeichenfolge, die schneller sein könnte.
Sogar noch schneller:
versuchen, diese