@Dawkins
100 실행이 너무 적은 것입니다, 당신은 여러 번 약 10000 번 실행하고 그것을 반복하고 신뢰할 수있는 결과를 얻기 위해 그 평균을해야합니다. 귀하의 예에서는 오류의 한계가 크지 만 갈 길이 적절합니다. 더 비싼 것을 보여준다 18 %의 성능 차이가있다
var results1 = new List<long>();
var results2 = new List<long>();
for (int j = 0; j < 100; j++)
{
var sp = new System.Diagnostics.Stopwatch();
// With HttpContext.Current:
sp.Start();
for (int i = 0; i < 10000; i++)
{
HttpContext.Current.Response.Output.Write(i);
}
sp.Stop();
results1.Add(sp.ElapsedTicks);
// Without:
TextWriter output2 = HttpContext.Current.Response.Output;
sp.Reset();
sp.Start();
for (int i = 0; i < 10000; i++)
{
output2.Write(i);
}
sp.Stop();
HttpContext.Current.Response.Clear();
results2.Add(sp.ElapsedTicks);
}
results1.Sort();
results2.Sort();
HttpContext.Current.Response.Write(string.Format("HttpContext.Current={0:0.000}ms, Local variable={1:0.000}ms, R={2:0.0%}<br/>", results1[results1.Count/2]/(double)TimeSpan.TicksPerMillisecond, results2[results2.Count/2]/(double)TimeSpan.TicksPerMillisecond, (double)results1[results1.Count/2]/(double)results2[results2.Count/2]));
귀하의 결과 쇼 있다고하지만 그것을 떨어져 8 % :
여기에 내가 무슨 짓을했는지.
숫자를 여러 번 다시 실행하고 오류 마진이 1 % 미만인 10 % 차이가 발생했습니다.
그것은 주위 stablaizes :
HttpContext.Current=0,536ms, Local variable=0,486ms, R=110,2%
을 어쨌든, HttpContext.Current 당신이 방법이 더 비용이 크게 응답으로 구성되어 있습니다 (요청에 따라 10000보다를 호출해야합니다 상당한 성능 문제를 제기 할 수 있습니다. 통화 기록). 그리고 그것은 일어날 가능성이 없습니다.
어떤 이유로 논리적 콜 컨텍스트가 리턴하는 논리적 콜 컨텍스트 (무엇이든간에)가 반환하는 것을 선호하는 것처럼 보이는 것이 흥미 롭습니다. –