내 의견은 위의 당신이 당신의 환경에서 성능을 테스트해야합니다 것을 의미한다. Stopwatch 인스턴스를 사용하여 적어도 10000 번 이상 string.Format 및 StringBuilder.AppendFormat을 실행하는 루프를 만든 다음 Stopwatch.ElapsedMilliseconds의 값을 측정합니다. 이것은 대략 당신에게 차이에 대한 아이디어를 줄 것입니다.
광산 환경에서 두 가지 접근법은 매우 동일합니다. 100000 루프의 차이는 StringBuilder에 대한 2/3 밀리 초 장점이지만 사기는 다음과 같습니다 (당신이 절대적으로 명확하지 않는 한 노력 결과의 가치가)
는 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);
[당신의 말을 경구하려고하지 마십시오] (https://ericlippert.com/2012/12/17/performance-rant/)? – Steve
당신은 다음과 같은 것을 시도 할 것입니다 :'string st = ""; for (int i = 0; i <9000; i ++) { st + = "dop"; }'빨리 망할! 비극적 인 루프이지만, 왜? 그것은 9000 개의 객체를 생성했기 때문입니다. 'StringBuilder.Format'이 테스트를 통해 객체를 전파 하는지를 아는 방법? –
이와 같은 질문이있을 때 먼저 [참조 소스] (https://referencesource.microsoft.com/#mscorlib/system/string.cs,691a34e179b91fdb)를보십시오. StringBuilderCache는 프레임 워크 코드가 빠르지 않고 도움이 필요 없다고 확신시켜야합니다. –