ฉันอยู่ที่ปลายปัญญา Visual Studio มักจะช้าในการดีบักหรือโหลดเพียงธรรมดา ("เริ่มต้นโดยไม่มีการดีบัก") ไซต์ ASP.NET MVC ของฉัน ไม่เสมอไป: ในตอนแรกโปรเจ็กต์จะโหลดดีและเร็ว แต่เมื่อโหลดช้าพวกเขาจะโหลดช้าหลังจากนั้น ฉันอาจจะรอ 1-2 นาทีหรือมากกว่านั้น
การตั้งค่าของฉัน:
ฉันใช้Visual Studio 2012 Expressในปัจจุบัน แต่ฉันมีปัญหาเดียวกันใน Visual Studio 2010 Express เช่นกัน โซลูชันของฉันถูกเก็บไว้ในไดรฟ์เครือข่าย โดยเฉพาะเอกสารของฉันจะถูกเปลี่ยนเส้นทางไปยังไดรฟ์เครือข่ายหากมีความสำคัญ (ไม่ควรมีบางครั้งที่เว็บไซต์ของฉันโหลดเร็วมากภายใต้การตั้งค่านี้)
โดยปกติฉันโหลดใน Internet Explorer 9 แต่ปัญหาเดียวกันนี้เกิดขึ้นใน Firefox
สิ่งนี้สามารถเกิดขึ้นได้ในโครงการ ASP.NET MVC ใด ๆ ที่ฉันทำงานและดูเหมือนว่าจะหมุนไปรอบ ๆ โดยใช้ DisplayTemplates ซึ่งโครงการ ASP.NET MVC ทั้งหมดของฉันทำ และมันคือ C # และมีดโกนทั้งหมดถ้านั่นสำคัญ
อาการ:
ระบบจะโหลดสัญลักษณ์ของฉันหลายร้อยครั้ง โดยทั่วไปต่อไปนี้ แต่มีอย่างน้อย 300 แถวแต่ละแถวมีไฟล์ DLL ที่แตกต่างกันเล็กน้อยสำหรับ CSHTML เดียวกัน:
'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.
ในข้างต้นฉันมี DisplayTemplates สาม: "ติดต่อ", "สถานที่" และ "สถานะ" ปรากฏว่า IIS กำลังโหลดสัญลักษณ์สองครั้งสำหรับแต่ละครั้งที่ displaytemplate ได้รับการเรียก ดังนั้นหากฉันแสดงตาราง 100 รายการที่เรียกแม่แบบแสดงผลทั้งสามรายการนี้จะมีการโหลดสัญลักษณ์แยกกัน 600 รายการ
นี่ไม่ใช่การดำเนินการที่รวดเร็วเช่นกัน ค้นหาไฟล์บันทึกที่ IIS สร้างใช้เวลาประมาณ 200 ms เพื่อให้แต่ละสัญลักษณ์โหลด ดังนั้นความล่าช้าในระยะยาว
สิ่งที่ฉันได้ลอง:
- แก้ไขข้อบกพร่องหรือรุ่นที่วางจำหน่ายมันไม่สำคัญ
- การนำโปรเจ็กต์ของฉันไปใช้กับการติดตั้ง IIS แบบเต็มบนเว็บเซิร์ฟเวอร์จะทำงานได้อย่างรวดเร็วและไม่มีปัญหา
- Cassini, IIS Express 7.5 และ IIS Express 8.0 ล้วนมีปัญหา
- ลบจุดสั่งหยุดทั้งหมดไม่ทำอะไรเลย
- ทำความสะอาดโซลูชันหรือลบ. suo ไม่ทำอะไรเลย
- ถ้าฉันซ่อมแซม IIS Express หรือลบ
My Docs\IISExpress
โฟลเดอร์หรือซ่อมแซม / ติดตั้ง Visual Studio →ปัญหาอาจหายไป แต่เพียงชั่วครู่ก่อนที่มันจะกลับมา
คำแนะนำใด ๆ ที่ชื่นชม
เพื่อตอบคำถามเพิ่มเติมใช่เครื่องของฉันมีแรงม้าอย่างแน่นอน สิ่งที่ทำให้โกรธคือโครงการเดียวกันที่มีการเปลี่ยนแปลงอะไรสามารถโหลดได้อย่างรวดเร็วบางครั้งโดยทั่วไปหลังจากฉันซ่อมแซม IIS Express และลบMy Docs\IISExpress
โฟลเดอร์ ในที่สุด "บางสิ่ง" จะเกิดขึ้นและใช้เวลาโหลดอีก 2 นาที สิ่งที่ฉันกำลังทำอยู่ไม่ใช่โครงการที่ซับซ้อน ไม่มีไลบรารีหรือการอ้างอิงภายนอกและ VS.NET ของฉันไม่มีส่วนเสริมอะไรเลย
เครื่องนี้มี Symantec Endpoint Protection ซึ่งมีประวัติว่าก่อให้เกิดความเสียหาย แต่การปิดใช้งานทันที (ดีในฐานะผู้ดูแลระบบ) ไม่สามารถแก้ไขปัญหาได้
ฉันมีทฤษฎี ณ จุดนี้ ฉันคิดว่าทั้งหมดนี้เป็นเพราะฉันทำงานนอกโฟลเดอร์เปลี่ยนเส้นทางออกจากเครือข่ายที่ใช้ร่วมกัน ในขณะที่เครื่องมือดีบั๊กกำลังผ่านเส้น "สัญลักษณ์ที่โหลด" หลายร้อยเส้นฉันหยุดชั่วคราวเพื่อดูว่ากำลังทำอะไรอยู่ มันอยู่ในรหัสของฉันโหลด 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'
ดูเหมือนว่า Visual Studio กำลังคอมไพล์จอแสดงผลของฉันทุกครั้งที่มีการเรียกใช้ซึ่งเป็นอีกครั้งหลายร้อยครั้ง ทฤษฎีของฉันคือ Visual Studio รวบรวมไฟล์บันทึกลงในเครือข่ายที่ใช้ร่วมกันเครือข่ายใช้ร่วมกันแล้วประทับเวลาใหม่และ Visual Studio คิดว่าไฟล์มีการเปลี่ยนแปลงและทำให้ Visual Studio recompiles อีกครั้ง เพียงทฤษฎีเท่านั้น ฉันไม่มีเงื่อนงำจริงๆ
อย่างแรกคือฉันมีไฟล์ออฟไลน์อยู่ (นี่เป็นคอมพิวเตอร์เดสก์ท็อปในสำนักงาน ฉันจะปิดการใช้งานรีบูตและลองใหม่ในวันพรุ่งนี้
นอกจากนี้การย้ายโครงการของฉันตามที่ได้รับในท้องถิ่น C: แก้ไขได้ มันโหลดเร็วมาก แต่นี่ไม่เหมาะในสภาพแวดล้อมการทำงาน ฉันทำรุ่นก่อนหน้าหายไปรหัสของฉันไม่ได้รับการสำรองเลยเว้นแต่ว่าฉันจะคัดลอกด้วยตนเอง
ฉันสามารถทำได้ด้วยการคัดลอกไปมาจาก C ไปยังเครือข่ายที่ใช้ร่วมกันถ้ามันมาถึงมัน มันน่ารำคาญกว่าที่จะรอสองนาทีสำหรับการโหลดหน้าเว็บทุกครั้ง