多くの人[1][2]と言うと、は、例外をスローしてスレッドを強制終了するため、スケーラビリティの問題があるため、Response.Redirect(url,false)
を使用する必要があります。Response.Redirect(url)とResponse.Redirect(url、false)のパフォーマンスを測定する方法は?
2つの方法のパフォーマンスの違いを数値で知りたいと思います。
コードがResponse.Redirect
のasp.net Webページを作成しました。
それから私はページへの要求を発行するために、このコンソールアプリケーションを書きました。
private const int concurrentRequests = 800;
static void Main(string[] args)
{
Console.WriteLine("Type in the URL:");
var url = Console.ReadLine();
Console.WriteLine($"concurrentRequests={concurrentRequests}");
ServicePointManager.DefaultConnectionLimit = concurrentRequests;
List<Task> tasks = new List<Task>(concurrentRequests);
Stopwatch watch = new Stopwatch();
watch.Start();
for (int i = 0; i < concurrentRequests; i++)
{
Task t = new Task(o => GetResponse((string)o), url);
tasks.Add(t);
t.Start();
}
Task.WaitAll(tasks.ToArray());
watch.Stop();
Console.WriteLine($"Execution time: {watch.ElapsedMilliseconds}");
Console.ReadKey();
}
static void GetResponse(string url)
{
var request =(HttpWebRequest) WebRequest.Create(url);
request.AllowAutoRedirect = false;
var response = request.GetResponse();
using (StreamReader sr = new StreamReader(response.GetResponseStream()))
{
var content = sr.ReadToEnd();
}
}
また、machine.configのasp.netスレッドを4に減らしました。
しかし、それはのResponse.Redirect(URL、偽)が415msを要しながらのResponse.Redirect(URL)を実行するために350msのを取る判明。
結果が記事の理論に合致しないのはなぜですか?
要するに、時間を重視する必要があります。私は毎秒チェック要求を意味します。 – user960567