很多人[1][2]說Response.Redirect(url)
不好,我們應該用Response.Redirect(url,false)
,因爲前者拋出異常並殺死線程,從而有可擴展性問題。如何衡量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(網址,FALSE)需要415ms。
爲什麼結果不符合文章中的理論?
總之,你應該強調時間。我的意思是每秒檢查一次請求。 – user960567