当我只需要将字符替换为另一个字符时,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