2010-08-12 14 views
5

Bazı fotoğraf kitabı sayfasında 20 küçük resim göstermek istiyorum. Bu küçük resimler, bir veritabanından programlı olarak yüklenir. Bu küçük resimler zaten yeniden boyutlandırıldı. Onlara gösterdiğimde, görüntüler yavaş yavaş yükleniyor. Bazı 2 secons için biraz beklemek için 0,5 saniye sürüyor. Veritabanı önemli değil çünkü ben veritabanı katmanını kaldırdığımda, performans sorunu hala var. Aynı görüntüleri doğrudan html ile yüklediğimde, görüntüler hemen yüklenir.ASP.NET MVC MVC framework üzerinden yavaş görüntü yükleme?

Resim/dosya mvc çerçevesinde yavaş yükleniyor mu yoksa bir şey mi eksik?

Bu

//in html 
<img src='/File/Image.jpg' border='0'>      

//in controller 
public FileResult File(string ID) 
{   
    //database connection removed, just show a pic 
    byte[] imageFile = System.IO.File.ReadAllBytes(ID); 
    return new FileContentResult(imageFile,"image/pjpeg"); 
} 

Bu Sen MVC üzerinden görüntü açarak işlem yükü ekliyoruz

<img src='/Content/Images/Image.jpg' border='0'>      

cevap

1

hemen gider çok yavaş gidiyor. Doğrudan bir görüntüye bağlandığınızda, MVC boru hattından ziyade IIS tarafından otomatik olarak işlenir, böylece çok fazla yük atlarsınız.

Ayrıca, bir bayt dizisine yüklenerek, tam görüntüyü doğrudan diskten akışa almak yerine, diskten belleğe tam görüntü yükleyip aktarabilirsiniz. Bu işle biraz daha iyi performans elde edebilirsiniz

:

[OutputCache(Duration=60, VaryByParam="*")] 
public FileResult File(string ID) 
{ 
    string pathToFile; 
    // Figure out file path based on ID 
    return File(pathToFile, "image/jpeg"); 
} 

Ama oldukça hızlı statik dosyalar için tamamen MVC atlama olarak olacak değil.

Yukarıdakiler sizin için düzeltirse, muhtemelen önbelleğe alma parametrelerini karıştırmak isteyeceksiniz.

+0

hala performans sorunu devam ediyor. çok garip. Sadece mvc yükü üzerine koymak için çok yavaş gider. – MichaelD

+1

Göz önünde bulundurulması gereken diğer bir şey, tarayıcı tarafından önbelleğe alınıp saklanmadığıdır. Dosyaya doğrudan erişim için kesinlikle önbelleğe alınacaktır, ancak bir eylem yöntemi kullanıldığında dosyayı her defasında yüklemesi zor olabilir. Önbelleği eklemek için önerimi güncellerim. –

9

Aynı sorunu yaşadım. MVC 3 kullanıyorum. Saçımı çıkardıktan sonra, web uygulamanızda Session State'i kullandığınızda, dinamik görüntü yüklemenin tıkanma oturumu istekleri nedeniyle tıkanmış gibi gözüktüğünü keşfettim. Bunu düzeltmek için, ben benim denetleyici dekore:

[SessionState (System.Web.SessionState.SessionStateBehavior.Disabled)]

benim Fotoğraflar denetleyicisi için bu özürlü oturum durumu ve geri hız. MVC'nin daha eski bir sürümünü kullanıyorsanız, bazı çemberler arasından atlamanız ve bunu yapmak için bir Denetleyici/Denetleyici fabrikası oluşturmanız gerekir. Bkz. How can I disable session state in ASP.NET MVC?

Bu yardımcı olur umarız!

+0

Denetleyici üzerindeki oturum durumunu devre dışı bırakmak da benim için de bu sorunu çözdü. Umarım bu konu MVC ekibi tarafından ele alınabilir, çünkü bazı durumlarda oturum durumunun önemli olduğundan eminim. – joelsand

+0

Sadece günümü kurtardın! Tam olarak aynı sorun vardı ve oturum durumu devre dışı bırakıldı, ancak MVC 4'te hala sorun var demektir. FYI: Görüntülerin herkese açık olarak erişilememesi nedeniyle "MVC ek yüküne" ihtiyacım vardı ve eylemim kullanıcı haklarını kontrol ediyor ve Görüntü izin verilirse. P.S .: Tek bir görüntüyü yüklerken değil, aynı anda birden fazla resim yüklerken bu sadece benim için deneyim yaşadım ... – ChrFin