是否使用string.Format
這樣的:當使用帶有許多參數的string.Format時,什麼是更高性能:string或StringBuilder?
string.Format(txt, arg0, arg1, arg2, arg3, arg4,...)
是等於說txt+=args;
從而創建新的對象,每次它追加在的args列表的新字符串?並更好地使用StringBuilder.Format
?
是否使用string.Format
這樣的:當使用帶有許多參數的string.Format時,什麼是更高性能:string或StringBuilder?
string.Format(txt, arg0, arg1, arg2, arg3, arg4,...)
是等於說txt+=args;
從而創建新的對象,每次它追加在的args列表的新字符串?並更好地使用StringBuilder.Format
?
我的上述評論意味着你應該在你的環境中測試你的表演。使用Stopwatch實例,創建一個循環,該循環至少運行在string.Format和StringBuilder.AppendFormat上十萬次,然後測量Stopwatch.ElapsedMilliseconds中的值。這大概會給你一個差異的想法。
在礦山環境中,兩種方法非常相似。在100000循環不同的是2/3毫秒優勢的StringBuilder但士氣是:
DO NOT DO MICROOPTIMIZATIONS
(除非你有絕對明確的結果值得的努力)。
樣品:
string s1 = "Argument 1";
string s2 = "Argument 2";
string s3 = "Argument 3";
string s4 = "Argument 4";
string s5 = "Argument 5";
string s6 = "Argument 6";
string s7 = "Argument 7";
string s8 = "Argument 8";
string s9 = "Argument 9";
string result = string.Empty;
object[] data = new object[] { s1, s2, s3, s4, s5, s6, s7, s8, s9 };
Stopwatch sw = new Stopwatch();
sw.Start();
for(int x = 0; x < 100000; x++)
result = string.Format("{0},{1},{2},{3},{4},{5},{6},{7},{8}", data);
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
StringBuilder sb = new StringBuilder();
sw = new Stopwatch();
sw.Start();
for (int x = 0; x < 100000; x++)
{
sb.Length = 0;
sb.AppendFormat("{0},{1},{2},{3},{4},{5},{6},{7},{8}", data);
result = sb.ToString();
}
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
有沒有辦法在運行時看到'string + ='創建的對象? –
不清楚。你在說什麼東西?字符串是不可變的,因此,每次調用+ =運算符時,都會創建一個新字符串,其中包含變量的前一個值以及添加的字符串。然後將新字符串分配給您的變量。 – Steve
如果只使用字符串格式,請使用string.Format。 如果使用字符串和/或字符串表單的很多連接,請使用StringBuilder。
的String.Format使用其實施StringBuilder的,所以你不能說哪一個更好。
你爲什麼不[嘗試比賽你的馬](https://ericlippert.com/2012/12/17/performance-rant/)? – Steve
你的意思是嘗試像這樣:'string st =「」; (int i = 0; i <9000; i ++) { st + =「dop」; 「它太快了!雖然它是災難性的循環,爲什麼?因爲它創建了9000個對象。如何知道'StringBuilder.Format'是否通過測試傳播對象? –
只要你有這樣的問題,首先看[參考源代碼](https://referencesource.microsoft.com/#mscorlib/system/string.cs,691a34e179b91fdb)。 StringBuilderCache應該說服你,框架代碼不會吸引,也不需要你的幫助。 –