मैं विट्स एंड पर हूं। विज़ुअल स्टूडियो आमतौर पर डीबग या सिर्फ सादे लोड ("डीबगिंग के बिना शुरू") मेरी ASP.NET MVC साइटों के लिए धीमी गति से धीमा है। हमेशा नहीं: पहली बार में, प्रोजेक्ट अच्छा और तेज़ लोड करेंगे, लेकिन एक बार जब वे धीमी गति से लोड करते हैं, तो वे हमेशा उसके बाद धीमी गति से लोड करेंगे। मैं 1-2 मिनट या अधिक प्रतीक्षा कर सकता था।
मेरा सेटअप:
मैं वर्तमान में विजुअल स्टूडियो 2012 एक्सप्रेस का उपयोग कर रहा हूं , लेकिन मुझे दृश्य स्टूडियो 2010 एक्सप्रेस में भी यही समस्या है। मेरा समाधान नेटवर्क ड्राइव पर संग्रहीत है; विशेष रूप से, यह मेरे दस्तावेज़ नेटवर्क ड्राइव पर पुनर्निर्देशित है, अगर यह मायने रखता है। (ऐसा नहीं होना चाहिए। कई बार मेरी साइट इस सेटअप के तहत बहुत तेजी से लोड होती है।)
मैं आमतौर पर इंटरनेट एक्सप्लोरर 9 में लोड करता हूं, लेकिन फ़ायरफ़ॉक्स में भी यही समस्या है।
यह किसी भी ASP.NET MVC प्रोजेक्ट पर हो सकता है जिस पर मैं काम करता हूं, और यह डिस्प्लेटेम्पलेट्स के चारों ओर घूमता हुआ प्रतीत होता है, जो मेरे सभी ASP.NET MVC प्रोजेक्ट्स करते हैं। और यह सब C # और रेजर है, अगर यह मायने रखता है।
लक्षण:
सिस्टम मेरे प्रतीकों को सैकड़ों बार लोड करेगा । मूल रूप से, निम्नलिखित, लेकिन कम से कम 300 ऐसी पंक्तियाँ हैं, जिनमें से प्रत्येक के लिए समान-अलग-अलग DLL फ़ाइलें समान HTMLHTML हैं:
'iisexpress.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\b63f8236\6775085d\App_Web_contact.cshtml.22013bb9.xighmhow.dll', Symbols loaded.
'iisexpress.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\b63f8236\6775085d\App_Web_contact.cshtml.22013bb9.cv5hktkf.dll', Symbols loaded.
'iisexpress.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\b63f8236\6775085d\App_Web_statuscode.cshtml.22013bb9.1o77hs8i.dll', Symbols loaded.
'iisexpress.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\b63f8236\6775085d\App_Web_statuscode.cshtml.22013bb9.jja-77mw.dll', Symbols loaded.
'iisexpress.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\b63f8236\6775085d\App_Web_location.cshtml.22013bb9.l_e9ev_s.dll', Symbols loaded.
'iisexpress.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\b63f8236\6775085d\App_Web_location.cshtml.22013bb9.b4n59gom.dll', Symbols loaded.
उपरोक्त में, मुझे तीन डिस्प्लेटेम्पलेट मिले हैं: "संपर्क", "स्थान", और "स्टेटसकोड"। ऐसा प्रतीत होता है कि IIS प्रत्येक बार दो बार प्रदर्शनों को लोड कर रहा होता है, जिसे डिस्प्लेटेम्पलेट कहा जाता है। इस प्रकार, यदि मैं 100 प्रविष्टियों में से एक तालिका प्रदर्शित कर रहा हूं, जो इन तीन प्रदर्शनियों को बुलाती है, तो यह 600 अलग-अलग प्रतीकों से भरी हुई है।
यह एक तेज़ ऑपरेशन भी नहीं है। IIS उत्पन्न करने वाली लॉग फ़ाइलों में देखते हुए, प्रत्येक प्रतीक को लोड होने में लगभग 200 ms लगते हैं। इस प्रकार, सुपर-लंबी देरी।
मैंने क्या कोशिश की है:
- डिबग या रिलीज़ संस्करण, इससे कोई फर्क नहीं पड़ता।
- एक वेब सर्वर पर पूर्ण IIS कार्यान्वयन पर मेरी परियोजना को लाना कोई समस्या नहीं के साथ सुपर फास्ट चलाता है।
- कैसिनी, IIS एक्सप्रेस 7.5, और IIS एक्सप्रेस 8.0 में सभी समस्याएँ हैं।
- हटाएं सभी ब्रेकप्वाइंट कुछ भी नहीं करते हैं।
- क्लीन सॉल्यूशन , या .su को हटाना भी कुछ नहीं करता है।
- यदि मैं IIS एक्सप्रेस की मरम्मत करता हूं, या
My Docs\IISExpress
फ़ोल्डर को हटाता हूं, या Visual Studio की मरम्मत / पुनर्स्थापना करता हूं → यह समस्या दूर हो जाती है, लेकिन केवल थोड़ी देर के लिए, इससे पहले कि यह ठीक हो जाए।
किसी भी सलाह की सराहना की है।
अधिक प्रश्नों का उत्तर देने के लिए, हाँ मेरी मशीन में निश्चित रूप से अश्वशक्ति है। एक बात यह है कि एक ही परियोजना, कुछ भी नहीं बदल रहा है, कभी-कभी बहुत जल्दी लोड हो सकता है, आमतौर पर जब मैं IIS एक्सप्रेस की मरम्मत करता है और My Docs\IISExpress
फ़ोल्डर को हटा देता हूं । आखिरकार "कुछ" होता है और फिर से लोड होने में 2 मिनट लगते हैं। मैं जिस पर काम कर रहा हूं वह एक जटिल परियोजना नहीं है। कोई बाहरी लाइब्रेरी या निर्भरता नहीं है, और मेरे वीएस.नेट का कोई जोड़ नहीं है, इसलिए कभी भी।
ध्यान दें, इस मशीन में सिमेंटेक एंडपॉइंट प्रोटेक्शन है, जिसके कारण तबाही का इतिहास है। लेकिन इसे सीधा अक्षम करना (प्रशासक होना अच्छा है) ने समस्या को ठीक नहीं किया।
मेरे पास इस बिंदु पर एक सिद्धांत है। मैं यह सब सोच रहा हूँ क्योंकि मैं एक नेटवर्क शेयर से रीडायरेक्टेड फ़ोल्डर को बंद कर रहा हूँ। जब डिबगर अपने सैकड़ों "लोड किए गए प्रतीकों" लाइनों से गुजर रहा था, तो मैंने यह देखने के लिए रुक गया कि यह क्या कर रहा है। यह मेरे कोड में था, मेरे पास DisplayTemplate लोड हो रहा था। टेम्पलेट आउटपुट में यह कदम:
Step into: Stepping over non-user code 'System.Threading.WaitHandle.InternalWaitOne'
Step into: Stepping over non-user code 'System.Threading.WaitHandle.WaitOne'
Step into: Stepping over non-user code 'System.CodeDom.Compiler.Executor.ExecWaitWithCaptureUnimpersonated'
Step into: Stepping over non-user code 'System.CodeDom.Compiler.Executor.ExecWaitWithCapture'
Step into: Stepping over non-user code 'Microsoft.CSharp.CSharpCodeGenerator.FromFileBatch'
Step into: Stepping over non-user code 'Microsoft.CSharp.CSharpCodeGenerator.System.CodeDom.Compiler.ICodeCompiler.CompileAssemblyFromFileBatch'
Step into: Stepping over non-user code 'System.Web.Compilation.AssemblyBuilder.Compile'
'iisexpress.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\b63f8236\6775085d\App_Web_statuscode.cshtml.22013bb9.bciuyg14.dll', Symbols loaded.
Step into: Stepping over non-user code 'System.Web.Compilation.BuildManager.CompileWebFile'
Step into: Stepping over non-user code 'System.Web.Compilation.BuildManager.GetVPathBuildResultInternal'
Step into: Stepping over non-user code 'System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert'
Step into: Stepping over non-user code 'System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory'
Step into: Stepping over non-user code 'System.Web.Mvc.BuildManagerWrapper.System.Web.Mvc.IBuildManager.FileExists'
Step into: Stepping over non-user code 'System.Web.Mvc.VirtualPathProviderViewEngine.GetPathFromGeneralName'
Step into: Stepping over non-user code 'System.Web.Mvc.VirtualPathProviderViewEngine.FindPartialView'
Step into: Stepping over non-user code 'System.Web.Mvc.ViewEngineCollection.Find'
Step into: Stepping over non-user code 'System.Web.Mvc.ViewEngineCollection.FindPartialView'
Step into: Stepping over non-user code 'System.Web.Mvc.Html.TemplateHelpers.ActionCacheViewItem.Execute'
'iisexpress.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\b63f8236\6775085d\App_Web_statuscode.cshtml.22013bb9.kwj3uqan.dll', Symbols loaded.
Step into: Stepping over non-user code 'System.RuntimeType.CreateInstanceSlow'
Step into: Stepping over non-user code 'System.Web.Mvc.DependencyResolver.DefaultDependencyResolver.GetService'
Step into: Stepping over non-user code 'System.Web.Mvc.BuildManagerViewEngine.DefaultViewPageActivator.Create'
Step into: Stepping over non-user code 'System.Web.Mvc.BuildManagerCompiledView.Render'
ऐसा लगता है कि विजुअल स्टूडियो हर बार मेरे डिस्प्लेटैंपलेट को फिर से जमा कर रहा है, जिसे फिर से सैकड़ों बार कहा जाता है। मेरा सिद्धांत यह है कि विज़ुअल स्टूडियो फ़ाइल को संकलित करता है, उसे नेटवर्क शेयर में सहेजता है, नेटवर्क शेयर फिर किसी तरह उस पर एक नया समय मुहर लगाता है, और विज़ुअल स्टूडियो तब सोचता है कि फ़ाइल बदल गई है और इस प्रकार विज़ुअल स्टूडियो इसे फिर से पुन: स्थापित करता है। केवल एक सिद्धांत हालांकि; मुझे वास्तव में कोई सुराग नहीं है।
एक के लिए, जाहिरा तौर पर मेरे पास ऑफ़लाइन फाइलें हैं (यह एक कार्यालय में एक डेस्कटॉप कंप्यूटर है; मैं कम देखभाल नहीं कर सकता)। मैं कल अक्षम, रीबूट और पुन: प्रयास करने जा रहा हूं।
इसके अलावा, मेरी परियोजना को आगे बढ़ाना, जैसा कि, स्थानीय C: को ठीक करता है। यह बहुत जल्दी लोड हो जाता है। लेकिन यह काम के माहौल में आदर्श नहीं है। मैं पिछले संस्करणों को खो देता हूं, जब तक मैं इसे मैन्युअल रूप से कॉपी नहीं करता, तब तक मेरा कोड बिल्कुल भी समर्थित नहीं है और इसे अब किसी के साथ साझा नहीं किया जाएगा।
मैं इसे C से नेटवर्क शेयर में आगे और पीछे कॉपी कर सकता हूं, अगर यह आता है। प्रत्येक पृष्ठ लोड के लिए दो मिनट प्रतीक्षा करना अधिक कष्टप्रद है।