2012-12-05 9 views
10

Çalışan sayfamda Response.Redirect var. Maaş sayfasına yönlendirir."EndResponse", ASP.Net sayfasının performansını artırabilir

Response.Redirect ("Salary.aspx"); 

Aşağıdaki gibi istisna işlemlerini ekleyene kadar gayet iyi çalışıyordu. ..

try 
{ 
    Response.Redirect ("Salary.aspx"); 
} 
catch(Exception ex) 
{ 
//MyLog(); 
    throw new Exception(); 
} 

//Remaining code in event handler 

Bu

"iş parçacığı iptal edildi” diyerek yeni bir duruma neden bu yönlendirmenin gibi yanlış endResponse ayarlayarak önlenebilir olduğunu bilmek gelen yeni istisna

Response.Redirect(url, false); 
Context.ApplicationInstance.CompleteRequest(); 

Açıklama: Her zaman istisna atar ama çerçeve tarafından ele alınır.Bir try.catch ekledim beri orada yakalandı (ve ben yeni bir istisna atar)

Not: CompleteRequest, daha fazla HTTP süzgeçleri ve modülleri atlar, ancak yok 'bypa Geçerli sayfa yaşam döngüsü içinde ss benzer etkinlikler

Not: Response.Redirect geçerli sayfanın işlenmesini sona erdirmek için bu istisna. ASP .Net'in kendisi bu özel durumu ele alır ve işleme devam etmek için ResetAbort'u çağırır.

SORU “olarak yanlış endResponse ayarı”

  1. olsun istisnasız beri artış performans atılır değil mi?
  2. olsun “gibi yanlış endResponse ayarı” sayfa yaşam döngüsü olayları beri azalma performans sonlandırılır değil ki?

    1. EventHandler kod kalan, false olarak endResponse ayarlarsanız

    tuzak çalıştırılacaktır. Bu yüzden, kalan kod için if kontrolünü yapmamız gerekiyor (Yeniden yönlendirme kriterleri yerine getirilmemişse kontrol edin). yanıtı (Response.Redirect(url) veya Response.Redirect(url, true)) Bitiş

Referans

  1. Why Response.Redirect causes System.Threading.ThreadAbortException?
  2. ASP.NET exception "Thread was being aborted" causes method to exit
+0

'Performans'ı farklı yönlerden ölçebilirsiniz! Tam olarak ne bekliyorsun? –

+0

@huMptyduMpty Aşağıdaki perspektiflerden gelen performans 1) Sayfa Yanıt Süresi 2) Bellek kullanımı – Lijo

+1

Ayrıca, web sitenizin performansını iyileştirmeye çalıştığınız için, bu [makale] (http://msdn.microsoft.com/en-us/magazine/cc163854 .aspx) bazı bilgiler de verebilir –

cevap

12

Response.Redirect(url, false) daha iyi performansının daha düşük olması olacaktır. Eğer kod çalıştırma üzerinde kontrol sahibi beri false ile, sadece kullanıcıyı yönlendirmek için giderken durumunda Kod artık yürütemezsiniz.

Bu

Response.Redirect() için MSDN entry belirtilir:

Eğer endResponse parametresi için gerçek belirtirseniz, bu yöntem tamamlandığında bir ThreadAbortException özel atar orijinal istek, için Son yöntemini çağırır. Bu istisnanın Web uygulama performansı üzerinde zararlı bir etkisi vardır, bu nedenle endResponse parametresi için yanlış iletilmesi önerilir.

Belirttiğiniz gibi sayfa yaşam döngüsü olayları konusunda endişelenmeniz gerekir. Kullanıcıyı Yeniden Yönlendiriyorsanız (sadece performans için değil) sayfa olaylarını yürütmeye devam etmemelisiniz. Kısa bir süre önce, what can happen 'u göstermeyen kısa bir kodlama/planlama ile kısa bir örnek yazdım.

Bu yazının en alt satırı, Response.Redirect() tarayıcısına 302 döndürmesidir. Sayfa yürütme devam ettiği için kullanıcı Response.Redirect(url, false)'u kullandığınızda bir sorun potansiyeli vardır ve kullanıcı 302'yi yok saymayı seçebilir ve bunun yerine 'un görüntülendiğini görür. Bu nedenle, emin olmak için gerekli adımları atmanız gerekir. Görmelerini istemediğin bir şey görmüyorum. Firefox için NoRedirect eklentisi bunu test ederken faydalıdır.

En iyi performans için

: endResponse parametre olarak kullanım "false", bir kullanıcı olmadığını görmek istemiyorum Eğer başka bir kod çalışmıyor sağlamak ve sayfa herhangi bir bilgi işlemek için gitmiyor sağlamak onlar 302.