2017-05-08 15 views
1

多くの人[1][2]と言うと、は、例外をスローしてスレッドを強制終了するため、スケーラビリティの問題があるため、Response.Redirect(url,false)を使用する必要があります。Response.Redirect(url)とResponse.Redirect(url、false)のパフォーマンスを測定する方法は?

2つの方法のパフォーマンスの違いを数値で知りたいと思います。

コードがResponse.Redirectのasp.net Webページを作成しました。

I created a asp.net web page, whose only code is <code>Response.Redirect</code>

それから私はページへの要求を発行するために、このコンソールアプリケーションを書きました。

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に減らしました。

I set <processModel maxWorkerThreads="4" maxIoThreads="4"/> in machine.config

しかし、それはのResponse.Redirect(URL、偽)が415msを要しながらのResponse.Redirect(URL)を実行するために350msのを取る判明。

結果が記事の理論に合致しないのはなぜですか?

+0

要するに、時間を重視する必要があります。私は毎秒チェック要求を意味します。 – user960567

答えて

1

もう1つ重要な問題があります。これがセキュリティです。今のところ私はなぜ他のものより速いのかを言いましょう。

遅いと無担保1ケースResponse.Redirect(url,endRespose:false) ページの完全なサイクルを実行し、クライアントにレンダリングすることができfalseパラメータを使用したので、それは遅いです!リダイレクトコマンドと一緒に!したがって、ページは通常は実行され、クライアントページ上ではほとんどレンダリングされます。そのため、速度が遅くなります。

例外をスローするもう1つのケースでは、残りの処理を停止し、さらにページのレンダリングを停止し、redirectコマンドだけを残し、その時間までにページにレンダリングしたものを残します。

私のこの質問と回答では、ページのリダイレクトを停止すると、falseオプションを指定してリダイレクト(false)を設定した場合、ページの完全な結果が表示されることがわかります。

Redirect to a page with endResponse to true VS CompleteRequest and security thread

は、私は常にページの残りの部分プロセスの停止と、リダイレクトを使用し、閉じるには - しかし、私は私の心に私が持っている残りの処理を可能にする他のいずれかを使用する場合は、上記のすべて - ページがレンダリングされ、余分な時間がかかることを示します。

関連する問題