2011-12-15 15 views
20

मुझे सच में नहीं पता कि इस प्रश्न के साथ कहां से शुरू किया जाए, लेकिन जिस साइट पर मैं काम कर रहा हूं, उसमें कुछ वास्तव में धीमी पृष्ठ लोड है। विशेष रूप से एक निर्माण करने के बाद, लेकिन हमेशा नहीं। वास्तव में इसे आने से पहले मुझे आमतौर पर पृष्ठ को 5-10 बार रीफ्रेश करना होता है। मुझे लगता है कि मैं यह देखने की कोशिश कर रहा हूं कि मुझे कहां देखना शुरू करना चाहिए।एएसपी.नेट एमवीसी 3 साइट लोडिंग बेहद धीमी है

ASP.NET MVC 3 Ninject AutoMapper इकाई की रूपरेखा कोड पहले 4.1 एसक्यूएल सर्वर 2008 उस्तरा

अद्यतन

कुछ प्रश्नों के संबंध में, यह हर पर इस लंबी लोड हो रहा है क्या कर सकते हैं पेज, लेकिन इसके बाद यह सभी पृष्ठों पर काफी तेज़ी से लोड हो जाता है।

इसे पोस्ट करने और आपके उत्तरों को प्राप्त करने के बाद मैंने एप्लिकेशन शुरू किया और यह अभी भी लोड हो रहा है और शायद तब तक लोड नहीं होगा जब तक कि मैं ब्राउज़र पर पुनः लोड नहीं करता।

कोई कैशिंग नहीं, और ईएफ मॉडल विशाल नहीं हैं।

मैं 6 जीबी मेमोरी और आई 7 प्रोसेसर के साथ रेजर और विजुअल स्टूडियो 2010 का उपयोग कर रहा हूं।

मैं आईआईएस एक्सप्रेस और डीबगिंग के दौरान डिफ़ॉल्ट वेब सर्वर का उपयोग कर रहा हूं। यह मुख्य सर्वर पर आईआईएस 7 पर भी करता है।

मैं एमवीसी प्रोफाइलर और झलक देख सकता हूं कि मैं क्या देख सकता हूं।

नीचे मेरे पास कुछ कोड है जब यह मुखपृष्ठ पर हिट करता है। मैं कहूंगा कि जब मैं पहली बार सर्वर शुरू करता हूं तो यह कभी लोड नहीं होता है। मैंने var मॉडल पर ब्रेक पॉइंट डाला जो कभी हिट नहीं होता है। अगर मैं पेज को फिर से लोड करता हूं तो यह करता है।

public ActionResult Index() 
     { 
      var model = new HomeViewModel(); 

      model.RecentHeadlines = _headlineService.GetHeadlines(1, Config.RecentHeadlinesPageSize, string.Empty); 

      return View(model); 
     } 

नीचे मेरा डेटाकॉन्टेक्स्ट सेटअप भी है।

public class DatabaseFactory : Disposable, IDatabaseFactory 
    { 
     private DataContext _dataContext; 
     public DataContext Get() 
     { 
      return _dataContext ?? (_dataContext = new DataContext()); 
     } 
     protected override void DisposeCore() 
     { 
      if (_dataContext != null) 
       _dataContext.Dispose(); 
     } 
    } 

public class Disposable : IDisposable 
    { 
     private bool isDisposed; 

     ~Disposable() 
     { 
      Dispose(false); 
     } 

     public void Dispose() 
     { 
      Dispose(true); 
      GC.SuppressFinalize(this); 
     } 
     private void Dispose(bool disposing) 
     { 
      if (!isDisposed && disposing) 
      { 
       DisposeCore(); 
      } 

      isDisposed = true; 
     } 

     protected virtual void DisposeCore() 
     { 
     } 
    } 

public class UnitOfWork : IUnitOfWork 
    { 
     private readonly IDatabaseFactory _databaseFactory; 
     private DataContext _dataContext; 

     public UnitOfWork(IDatabaseFactory databaseFactory) 
     { 
      _databaseFactory = databaseFactory; 
     } 

     protected DataContext DataContext 
     { 
      get { return _dataContext ?? (_dataContext = _databaseFactory.Get()); } 
     } 

     public void Commit() 
     { 
      DataContext.Commit(); 
     } 
    } 
+1

कुछ और विवरणों की आवश्यकता है। क्या यह पहला पृष्ठ मारने के लिए है? हर पृष्ठ? केवल कुछ पेज? लगातार या sporadically होता है? – Lester

+0

आपका ईएफ मॉडल कितना बड़ा है? क्या आपके आवेदन में कोई कैशिंग है? क्या यह विशेष रूप से बिल्ड या हमेशा के बाद होता है जब आप पहली बार निर्माण (एप्लिकेशन पुनरारंभ) के बाद एप्लिकेशन तक पहुंचते हैं? –

+0

यह धीमी मशीन के कारण भी हो सकता है। आपके पास कितनी मेमोरी है? कितने सीपीयू कोर? क्या यह एक लैपटॉप है, या एक वर्कस्टेशन है? – danludwig

उत्तर

14

मैं यह जांच कर शुरू करूंगा कि आईआईएस में समय-समय पर रीसाइक्लिंग होने की प्रक्रिया के लिए समय निर्धारित किया गया है।

मैं MVC Mini-Profiler का भी एक बहुत बड़ा प्रशंसक हूं जो आपको दिखा सकता है कि आपके पृष्ठ लोड के विभिन्न हिस्सों में कितनी देर लग रही है, निश्चित रूप से इसे देखें।

संपादित करें:

यह ध्यान देने योग्य है कि Glimpse project इन दिनों इस कार्य के लिए महान भी है लायक है।

+0

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

+2

+1। – avenmore

6

लगता है कि यह आईआईएस ऐपपूल रीसाइक्लिंग के साथ एक मुद्दा हो सकता है यदि आप इसे निष्क्रियता की अवधि के बाद या बाद में अनुभव कर रहे हैं।

ऐपपूल टाइमआउट्स में सहायता के लिए आप इस समस्या को कम करने में मदद के लिए बनाए गए batch file का उपयोग कर सकते हैं।

इससे नए निर्माण के बाद आपके लिए समस्या का समाधान नहीं होगा क्योंकि आपके एएसपी.नेट एमवीसी एप्लिकेशन को पहले रन पर जेआईटी-संकलित करने की आवश्यकता है। यदि आप उस मुद्दे को खत्म करने के लिए वास्तव में उत्सुक हैं, तो आप ASP.NET precompliation का उपयोग कर सकते हैं।

+1

मुझे ऐपपूल के बारे में आपकी बात पसंद है। +1 –

+0

वाह, इससे बड़ा अंतर आया। जब भी मैं इसे कभी-कभी जाता हूं, मुझे अब अपने परीक्षण सर्वर के लिए 5s इंतजार करना पड़ता है। डिफ़ॉल्ट निष्क्रिय टाइमटाइम क्या था? – avenmore

+0

@ हेवनमोर जो आपके होस्ट पर निर्भर करता है; आम तौर पर मुझे लगता है कि डिफ़ॉल्ट टाइमआउट 20 मिनट है लेकिन मुझे यकीन नहीं है कि मैं ऑफहैंड हूं। यदि आपके पास आईआईएस आईएमएचओ तक पहुंच का स्तर है तो इसे स्पष्ट रूप से सेट करना सबसे अच्छा अभ्यास है। – Aaronontheweb

1

Glimpse आज़माएं या ASP.NET Tracing का उपयोग करें।

यदि आप Razor Single File Generator for MVC के माध्यम से रेजर व्यू इंजन का उपयोग कर रहे हैं तो आप precompile your views भी कर सकते हैं।

+2

अन्य आइटम जिन्हें आप चेक कर सकते हैं ** बाहरी एमवीसी निर्भरता ** - जैसे ** सत्र राज्य **, ** डेटा सेवा ** इत्यादि जो मंदी का कारण बन सकती हैं। हमें बस एक मुद्दा था जहां अत्यधिक SQL सर्वर सत्र राज्य यातायात ने साइट को क्रॉल करने के लिए प्रेरित किया (* 200+ उपयोगकर्ताओं * के अतिरिक्त)। यह ट्रेसिंग में दिखाई नहीं दे रहा था। – SliverNinja

0

यह आपके पिछले भाग में क्या हुआ, इस पर निर्भर करता है, कभी-कभी यदि आप कोई त्रुटि फेंकते हैं और उसे साफ़ नहीं करते हैं तो आपको एप्लिकेशन चलाने में समस्याएं होंगी। यह त्रुटि होने पर हर बार ब्राउज़र को पुनरारंभ करने में मदद करता है।

हालांकि, यह कैशिंग का मुद्दा हो सकता है। यह संभव है कि आपका डेटाबेस खराब रखरखाव संदर्भ निपटान के कारण कैशिंग है। यह लुकअप को पृष्ठों में सामने आने के कारण तेजी से और तेज़ी से चलने का कारण बनता है। सुनिश्चित करें कि आप हमेशा अपने डेटाबेस लेन-देन के साथ किए गए प्रदर्शन() को कॉल करते हैं।

0

मजाकिया - मैंने एकता और एमवीसी के साथ एक बार ऐसा कुछ देखा है, लेकिन जिस समस्या का मेरा मानना ​​है वह स्वयं हल हो गया है। यह देखने के लिए कि समस्या एमवीसी के बाहर है या नहीं, आप चींटियों प्रोफाइलर को भी आजमा सकते हैं।

यदि आप एक अनुरोध को वहां बैठते हैं (5+ बार अनुरोध किए बिना) क्या होता है? एक ही अनुरोध चलाने दें - क्या आपका कोई कोड हिट है? (सेटअप लॉगिंग लॉग 4नेट, एनएलओएल, आदि) एप्लिकेशन_स्टार्ट चलाने के लिए, यह देखने के लिए कि संकलन के बाद कोई कोड बुलाया जा रहा है या नहीं।

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