当我只需要将字符替换为另一个字符时,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. Objective-C:initWithName:(char *)string
- 3. 在C++中使用<string,string>或<string,char>映射而不是<char, char>
- 4. 是否需要销毁char * =“string”或char * = new char [6]?
- 5. C++ char ** - > vector <string> - > string - > char **解析问题
- 6. 在C++中,“char * string []”是否等同于“char ** string”?
- 7. GCC 4.9 std :: string const char *
- 8. strfry(char * __ string)返回int?
- 9. 两者的std :: string与char *
- 10. Char * string []声明错误
- 11. char * string to hex arrary in C
- 12. 将std :: string转换为char
- 13. C++:char test [100] vs array <char, 100> vs string
- 14. 如何把2 char数组放在int putenv(char * string);用C
- 15. 不能将char复制到char *(string)的最后地址?
- 16. 如何将使用std :: string的xor加密转换为char或char *?
- 17. “std :: string + char”表达式是否创建另一个std :: string?
- 18. 从const char * [2]转换为pair <string,string>
- 19. CharacterSet to String和Int to Char铸造
- 20. 理解String对[Char]的影响?
- 21. 将void *(char * without \ 0)转换为std :: string
- 22. 将`hana :: string`转换为`constexpr const char(&)[]`
- 23. 如何将System :: String ^转换为const char *?
- 24. 如何在std :: string中存储const char *?
- 25. 复制std :: string :: insert(int pos,char ch)
- 26. int,char和string cin和验证方法?
- 27. 输出的char *到的std :: string C++
- 28. C++的std :: string到char与OpenGL的LoadBMP
- 29. 从std :: string向量返回char
- 30. 如何使用string ::使用char *代替
感谢您的测试计划! – Laguna 2012-02-03 14:23:27
+1出于兴趣,是否有人能够对System.String.ReplaceInternal的重载进行逆向工程?我有兴趣看看Dev是否在char超载上观察到了不变性:) – StuartLC 2012-02-03 14:27:02