文字を別の文字に置き換えるだけで、String.Replace(char、char)とString.Replace(string、string)の間にパフォーマンスの違いはありますか?String.Replace(char、char)またはReplace(string、string)?
9
A
答えて
9
はい、あります:私は、迅速な実験を実行し、文字列のバージョンが約3倍遅いようです。
string a = "quickbrownfoxjumpsoverthelazydog";
DateTime t1 = DateTime.Now;
for (int i = 0; i != 10000000; i++) {
var b = a.Replace('o', 'b');
if (b.Length == 0) {
break;
}
}
DateTime t2 = DateTime.Now;
for (int i = 0; i != 10000000; i++) {
var b = a.Replace("o", "b");
if (b.Length == 0) {
break;
}
}
DateTime te = DateTime.Now;
Console.WriteLine("{0} {1}", t2-t1, te-t2);
1.466s対4.583s
文字列と、過負荷がoldString
のすべての文字を通過するために余分なループを必要とするので、これは、驚くべきことではありません。このループは正確に1回実行されますが、オーバーヘッドはまだ存在します。
5
私はがstring.Replace(char, char)
と予想されます。これは、正確な容量のスペースを正確に割り当てることができるためです。私はそれが多くの現実世界のアプリケーションで重要なパフォーマンスの違いを作るだろうとは思わない。
さらに重要なのは、私はそれがより読みだと言うだろう - それはあなたが本当に同じ長さの文字列で終わるだろうことを明確です。
3
String.Replace(char, char)
は高速です。理由は簡単です。
- シャアの交換は、異なるサイズの文字列を割り当てる必要はありません、文字列置換が最初に新しいサイズを見つけるか、
- シャアの交換にはない、交換用
StringBuilder
を使用する必要があります文字列の範囲でチェックする必要があります。あなたはABCACABCAC
のような文字列を持っていて、ABC
を交換したい想像してみてください。 3つの文字が一致しているかどうかを調べる必要があります。文字を扱うときには、1つの文字だけを見つけるだけです。テストプログラムのための
関連する問題
- 1. char * to std :: string
- 2. String/char * concatinate、C
- 3. boost :: spirit char/string mix
- 4. C++のcharとString
- 5. int to string、char * itoa
- 6. char **私はmalloc size(char *)かchar * string lengthのサイズですか?
- 7. const unsigned char * to std :: string
- 8. GCC 4.9 std :: string from const char *
- 9. "std :: string + char"式は別のstd :: stringを作成しますか?
- 10. <string> charをcharに変換できません
- 11. Java - StringBuilder replace()はエラーを示します。メソッドString.replace(char、char)は適用されません
- 12. `const char * [2]`から{string、string>に変換します。
- 13. Javaの機密データ:char [] vs String?ポイントは?
- 14. const charとstringを別のconst charに結合する
- 15. スキームstring-refとchar-whitespace?使用する
- 16. char-arrayをSystem :: Stringに変換する^
- 17. stringstream、string、char *変換の混乱
- 18. LPWSTRをchar */stringに変換する
- 19. どちらが先ですか? charまたはString?
- 20. ベクター<string>またはベクター<ベクター<char>>?
- 21. C#String Replace
- 22. Razor String Replace
- 23. string IndexOfとReplace
- 24. string replace(php)
- 25. jQuery/Javascript String replace
- 26. javascript string replace function
- 27. Pandas String Replace Python
- 28. Netezzaでストアドプロシージャエラーが発生しました^ found ""(char 76)unterminated BEGIN_PROC string
- 29. C#でSecureStringを初期化するためにChar []またはStringをChar *に変換する方法は?
- 30. mingw const char stringは確かにconstではありません
感謝!関心のうち – Laguna
+1、誰もがSystem.String.ReplaceInternalのオーバーロードをリバースエンジニアリングすることができますか?私はDevがchar overloadで不変性を観察したかどうかを知りたいです:) – StuartLC