Ich habe eine Funktion, die durch die Saite läuft und nach Mustern sucht und Teile davon verändert. Ich kann es optimieren, indemist String.Contains() schneller als durch das gesamte Array von char in String gehen?
if (!text.Contains(pattern)) return;
Einsetzen Aber, ich bin durch die ganze Reihe tatsächlich zu Fuß und Teile davon mit dem Muster verglichen wird, so ist die Frage, wie String.Contains()
tatsächlich funktioniert? Ich weiß, dass es so eine Frage gab - How does String.Contains work?, aber die Antwort ist ziemlich unklar. Also, wenn String.Contains()
durch das ganze Array von Zeichen geht und sie mit Mustern vergleicht, nach denen ich auch suche, würde es meine Funktion nicht wirklich schneller machen, aber langsamer.
Also, ist es eine gute Idee, solche Optimierungen zu versuchen? Und - ist es möglich, dass String.Contains()
noch schneller als Funktion ist, die nur durch das ganze Array gehen und jedes einzelne Zeichen mit einem konstanten vergleichen? Hier
ist der Code:
public static char colorchar = (char)3;
public static Client.RichTBox.ContentText color(string text, Client.RichTBox SBAB)
{
if (text.Contains(colorchar.ToString()))
{
int color = 0;
bool closed = false;
int position = 0;
while (text.Length > position)
{
if (text[position] == colorchar)
{
if (closed)
{
text = text.Substring(position, text.Length - position);
Client.RichTBox.ContentText Link = new Client.RichTBox.ContentText(ProtocolIrc.decode_text(text), SBAB, Configuration.CurrentSkin.mrcl[color]);
return Link;
}
if (!closed)
{
if (!int.TryParse(text[position + 1].ToString() + text[position + 2].ToString(), out color))
{
if (!int.TryParse(text[position + 1].ToString(), out color))
{
color = 0;
}
}
if (color > 9)
{
text = text.Remove(position, 3);
}
else
{
text = text.Remove(position, 2);
}
closed = true;
if (color < 16)
{
text = text.Substring(position);
break;
}
}
}
position++;
}
}
return null;
}
Sie müssten den Rest des Codes (eine Gliederung) posten. Aber ja, wahrscheinlich machst du hier Doppelarbeit. –
Warum tätest du beide Ansätze in einer for-Schleife? – Habib
@Habib das ist keine schlechte Idee :) – Petr