【问题标题】:How to measure performance of Response.Redirect(url) and Response.Redirect(url,false)?如何衡量 Response.Redirect(url) 和 Response.Redirect(url,false) 的性能?
【发布时间】:2017-05-08 21:44:39
【问题描述】:

很多人[1][2]Response.Redirect(url)不好,我们应该使用Response.Redirect(url,false),因为前者会抛出异常并杀死线程,因此存在可伸缩性问题。

所以我想知道这两种方式在数值上的性能差异。

我创建了一个asp.net网页,其唯一代码是Response.Redirect

然后我编写了这个控制台应用程序来向页面发出请求。

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) 需要 350 毫秒才能执行,而 Response.Redirect(url,false) 需要 415 毫秒。

为什么结果不符合文章中的理论?

【问题讨论】:

  • 总之你应该强调时间。我的意思是每秒检查请求数。

标签: c# asp.net redirect


【解决方案1】:

这里还有一个更重要的问题,那就是安全性。现在让我说一下为什么一个比另一个快。

缓慢且不安全的一种情况Response.Redirect(url,endRespose:false) 它比较慢,因为使用false 参数您允许页面的整个周期在客户端上运行和呈现!连同重定向命令!所以页面正常运行并且几乎呈现在客户端页面上 - 因此速度较慢。

引发异常的另一种情况是停止其余处理并停止进一步呈现页面 - 只留下重定向命令 - 以及您在页面上呈现的内容。

关于我的这个问答,我分析并证明,如果你停止页面的重定向,你可以看到页面的完整结果——如果你设置了 redirect( ,false) 和 false 选项。

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

要关闭,我总是使用重定向来停止页面的其余进程 - 但如果我使用另一个允许我想到的其余处理的另一个 - 页面被渲染并且所花费的额外时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-06
    • 2013-01-06
    • 2013-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多