當我只需要將字符替換爲另一個字符時,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 VS 4.583s
這並不奇怪,因爲用繩子超載需要額外的循環要經過oldString
的所有字符。該循環只運行一次,但開銷仍然存在。
5
我會預計string.Replace(char, char)
可能會更快,因爲它可以分配恰到好處的空間。不過,我懷疑它會在許多真實世界的應用程序中產生顯着的性能差異。
更重要的是,我會說它更具可讀性 - 更清晰的是,你最終會得到一串相同長度的字符串。
3
String.Replace(char, char)
更快。原因很簡單:
- 字符替換並不需要分配一個字符串具有不同的尺寸,字符串替換需要找出新的規模第一,或者使用
StringBuilder
用於替換 - 字符替換不需要使用一系列字符串進行檢查。想象一下你有一個像
ABCACABCAC
這樣的字符串,並且你想替換ABC
。你需要找出3個字符是否匹配,當使用字符時,你只需要找到一個字符。
相關問題
- 1. String.Replace char to string
- 2. char to string error
- 3. C++ string/char * concatenation
- 4. Objective-C:initWithName:(char *)string
- 5. 在C++中使用<string,string>或<string,char>映射而不是<char, char>
- 6. 是否需要銷燬char * =「string」或char * = new char [6]?
- 7. String Char迭代器
- 8. 在C++中,「char * string []」是否等同於「char ** string」?
- 9. C++ char ** - > vector <string> - > string - > char **解析問題
- 10. std :: string gets(char *)而不是(const char *)
- 11. Char或String - > Scala中的Unicode值?
- 12. 將std :: string複製到char *
- 13. 兩者的std :: string與char *
- 14. Char * string []聲明錯誤
- 15. char concat to string returns wrong length
- 16. strfry(char * __ string)返回int?
- 17. nameless char [] to std :: string&reference
- 18. char * string to hex arrary in C
- 19. 將char添加到std :: string
- 20. 轉換的std :: string到char *
- 21. GCC 4.9 std :: string const char *
- 22. cstring string; vs char字符串;
- 23. 深拷貝std :: string :: c_str()char *
- 24. 將std :: string轉換爲char
- 25. CMake STRING REGEX REPLACE
- 26. vb.net string replace aspx
- 27. 在java中使用.replace(char oldChar,char newChar)
- 28. C++:char test [100] vs array <char, 100> vs string
- 29. 如何把2 char數組放在int putenv(char * string);用C
- 30. 不能將char複製到char *(string)的最後地址?
感謝您的測試計劃! – Laguna 2012-02-03 14:23:27
+1出於興趣,是否有人能夠對System.String.ReplaceInternal的重載進行逆向工程?我有興趣看看Dev是否在char超載上觀察到了不變性:) – StuartLC 2012-02-03 14:27:02