Das Problem mit der Antwort von @DustinDavis ist, dass es rekursiv mit derselben Zeichenfolge arbeitet. Sofern Sie nicht vorhaben, eine Hin- und Her-Manipulation durchzuführen, sollten Sie für diese Art von Test wirklich separate Objekte für jeden Manipulationsfall haben.
Ich habe mich entschlossen, meinen eigenen Test zu erstellen, weil ich im gesamten Web einige widersprüchliche Antworten gefunden habe, und ich wollte ganz sicher sein. Das Programm, an dem ich arbeite, behandelt viel Text (in einigen Fällen Dateien mit Zehntausenden von Zeilen).
Hier ist eine schnelle Methode, die Sie kopieren und einfügen können, um selbst zu sehen, welche schneller ist. Möglicherweise müssen Sie zum Testen eine eigene Textdatei erstellen. Sie können jedoch problemlos Text von überall kopieren und einfügen und eine ausreichend große Datei für sich selbst erstellen:
using System;
using System.Diagnostics;
using System.IO;
using System.Text;
using System.Windows;
void StringReplace_vs_StringBuilderReplace( string file, string word1, string word2 )
{
using( FileStream fileStream = new FileStream( file, FileMode.Open, FileAccess.Read ) )
using( StreamReader streamReader = new StreamReader( fileStream, Encoding.UTF8 ) )
{
string text = streamReader.ReadToEnd(),
@string = text;
StringBuilder @StringBuilder = new StringBuilder( text );
int iterations = 10000;
Stopwatch watch1 = new Stopwatch.StartNew();
for( int i = 0; i < iterations; i++ )
if( i % 2 == 0 ) @string = @string.Replace( word1, word2 );
else @string = @string.Replace( word2, word1 );
watch1.Stop();
double stringMilliseconds = watch1.ElapsedMilliseconds;
Stopwatch watch2 = new Stopwatch.StartNew();
for( int i = 0; i < iterations; i++ )
if( i % 2 == 0 ) @StringBuilder = @StringBuilder .Replace( word1, word2 );
else @StringBuilder = @StringBuilder .Replace( word2, word1 );
watch2.Stop();
double StringBuilderMilliseconds = watch1.ElapsedMilliseconds;
MessageBox.Show( string.Format( "string.Replace: {0}\nStringBuilder.Replace: {1}",
stringMilliseconds, StringBuilderMilliseconds ) );
}
}
Ich habe diese Zeichenfolge erhalten. Ersetzen () war jedes Mal, wenn Wörter mit 8 bis 10 Buchstaben ausgetauscht wurden, um etwa 20% schneller. Probieren Sie es selbst aus, wenn Sie Ihre eigenen empirischen Beweise wollen.