2010-08-12 11 views
5

कुछ फोटोबुक पेज पर मैं अनुमोदन 20 थंबनेल दिखाना चाहता हूं। ये थंबनेल प्रोग्रामेटिक रूप से डेटाबेस से लोड होते हैं। उन थंबनेल पहले से ही आकार बदल चुके हैं। जब मैं उन्हें दिखाता हूं तो छवियां थोड़ी धीमी होती हैं। कुछ 2 सेकेंड के लिए कुछ इंतजार लोड करने के लिए 0.5 सेकंड लेते हैं। डेटाबेस कोई फर्क नहीं पड़ता क्योंकि जब मैं डेटाबेस परत को हटा देता हूं, तो प्रदर्शन समस्या अभी भी मौजूद है। जब मैं एक ही छवियों को सीधे HTML से लोड करता हूं तो समस्याएं तुरंत छवियों को लोड करती हैं।एमएससी ढांचे के माध्यम से एएसपी.नेट एमवीसी धीमी छवि लोडिंग?

एमवीसी ढांचे के माध्यम से छवियों/फ़ाइलों को लोड करना धीमा है या क्या मुझे कुछ याद आ रही है?

यह बहुत धीमी गति से

//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"); 
} 

यह तुरंत चला जाता है

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

उत्तर

1

आप MVC के माध्यम से छवि उजागर द्वारा प्रसंस्करण भूमि के ऊपर जोड़ रहे हैं चला जाता है। जब आप सीधे किसी छवि से लिंक करते हैं, तो इसे एमआईसी पाइपलाइन की बजाय आईआईएस द्वारा स्वचालित रूप से संभाला जाता है, ताकि आप बहुत अधिक ओवरहेड छोड़ सकें।

इसके अलावा, बाइट सरणी में लोड करके, आप पूरी छवि को डिस्क से स्मृति में लोड कर रहे हैं और फिर डिस्क से सीधे स्ट्रीमिंग के बजाय इसे स्ट्रीम कर रहे हैं।

आप इस के साथ थोड़ा बेहतर प्रदर्शन प्राप्त हो सकता है:

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

लेकिन यह काफी के रूप में तेजी से स्थिर फ़ाइलों के लिए पूरी तरह MVC लंघन के रूप में होने के लिए नहीं जा रहा है।

यदि उपरोक्त आपके लिए इसे ठीक करता है, तो आप शायद कैशिंग पैरामीटर के साथ गड़बड़ करना चाहते हैं।

+0

अभी भी, प्रदर्शन समस्या रहता है। बहुत अजीब। यह सिर्फ एमवीसी ओवरहेड पर बस इतना धीमा हो जाता है। – MichaelD

+1

विचार करने की दूसरी बात यह है कि ब्राउज़र द्वारा इसे कैश किया जा रहा है या नहीं। यह निश्चित रूप से फ़ाइल तक सीधे पहुंच के लिए कैश किया जाएगा, लेकिन हो सकता है कि कार्रवाई विधि का उपयोग करते समय हर बार फ़ाइल लोड करने के लिए मजबूर होना पड़े। मैं कैशिंग जोड़ने के लिए अपना सुझाव अपडेट करूंगा। –

9

मुझे एक ही समस्या थी। मैं एमवीसी 3 का उपयोग कर रहा हूं। मेरे बालों को खींचने के बाद, मैंने जो खोजा है वह यह है कि एक बार जब आप अपने वेब ऐप में सत्र राज्य का उपयोग करते हैं, तो पाउंडिंग सत्र अनुरोधों के कारण गतिशील छवि लोडिंग छिपी हुई लगती है। इसे ठीक करने के लिए, मैं के साथ मेरी नियंत्रक सजाया:

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

मेरी तस्वीरें नियंत्रक के लिए यह विकलांग सत्र स्थिति, और गति लौट आए। यदि आप एमवीसी के पहले संस्करण का उपयोग कर रहे हैं, तो आपको कुछ हुप्स के माध्यम से कूदना होगा और ऐसा करने के लिए नियंत्रक/नियंत्रक फैक्ट्री बनाना होगा। How can I disable session state in ASP.NET MVC?

आशा है कि इससे मदद मिलती है!

+0

नियंत्रक पर सत्र स्थिति को अक्षम करने से भी मेरे लिए यह समस्या ठीक हो गई। उम्मीद है कि इस मुद्दे को एमवीसी टीम द्वारा संबोधित किया जा सकता है, क्योंकि मुझे यकीन है कि कुछ मामलों में सत्र राज्य महत्वपूर्ण है। – joelsand

+0

आपने अभी अपना दिन बचाया है! वही समस्या थी और सत्र स्थिति को अक्षम करने से यह तय हो गया था, लेकिन इसका मतलब है कि समस्या अभी भी एमवीसी 4 में है। एफवाईआई: मुझे "एमवीसी ओवरहेड" की आवश्यकता है क्योंकि छवियां सार्वजनिक रूप से सुलभ नहीं हैं और मेरी कार्रवाई उपयोगकर्ता के अधिकारों की जांच करती है और फिर लौटाती है छवि अगर उसे अनुमति है। पीएस .: मुझे अनुभव था कि एक ही समय में एकाधिक छवियों को लोड करते समय मुझे केवल यह खुशी होगी, लेकिन एक छवि लोड करते समय नहीं ... – ChrFin

संबंधित मुद्दे