Ben bitirdim. Visual Studio ASP.NET MVC sitelerimi genellikle ağdan hata ayıklamak veya sadece düz yükleme ("hata ayıklama olmadan başlatma"). Her zaman değil: ilk başta, projeler güzel ve hızlı yüklenir, ancak yavaş yüklendikten sonra bundan sonra her zaman yavaş yüklenir. 1-2 dakika veya daha fazla bekleyebilirdim.
Kurulumum:
Şu anda Visual Studio 2012 Express kullanıyorum , ancak Visual Studio 2010 Express'te de aynı sorunu yaşadım. Çözümüm bir ağ sürücüsünde saklanıyor; özellikle, önemliyse Belgelerim bir ağ sürücüsüne yönlendirilir. (Olmamalı. Sitemin bu kurulum altında çok hızlı yüklendiği zamanlar var.)
Genellikle Internet Explorer 9'a yüklüyorum, ancak aynı sorun Firefox'ta da oluyor.
Bu, üzerinde çalıştığım herhangi bir ASP.NET MVC projesinde olabilir ve tüm ASP.NET MVC projelerimin yaptığı DisplayTemplates'e sahip olduğu anlaşılıyor. Ve eğer önemliyse hepsi C # ve Razor.
Semptomlar:
Sistem sembollerimi yüzlerce kez yükleyecek . Temel olarak, aşağıdakiler, ancak her biri aynı CSHTML'ler için her zamankinden biraz farklı DLL dosyalarına sahip en az 300 satır vardır:
'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.
Yukarıda üç DisplayTemplates var: "Kişi", "Konum" ve "StatusCode". Görünen o ki, görüntüleme şablonunun her çağrılışında IIS iki kez sembol yüklüyor. Bu nedenle, bu ekran şablonlarının üçünü çağıran 100 girişlik bir tablo görüntülüyorsam, 600 ayrı simge yüklüdür.
Bu da hızlı bir işlem değil. IIS'nin oluşturduğu günlük dosyalarına bakıldığında, her sembolün yüklenmesi yaklaşık 200 ms sürer. Böylece, süper uzun gecikmeler.
Ne Denedim?
- Hata ayıklama veya Sürüm sürümü, önemli değil.
- Projemi bir web sunucusunda tam bir IIS uygulamasına koymak, sorun olmadan süper hızlı çalışır.
- Cassini, IIS Express 7.5 ve IIS Express 8.0'da sorun var.
- Tüm Kesme Noktalarını Sil hiçbir şey yapmaz.
- Temiz Çözüm veya .suo silmek de hiçbir şey yapmaz.
- IIS Express'i onarırsam veya
My Docs\IISExpress
klasörü siler veya Visual Studio'yu onarır / yeniden yüklerseniz → sorun giderilebilir, ancak hemen geri gelmeden önce bir süre için gidebilir.
Herhangi bir tavsiye takdir edilmektedir.
Daha fazla soruya cevap vermek için, evet makinem kesinlikle beygir gücüne sahip. Öfkeli olan şey, NOTHING değiştirilmiş olan aynı projenin, bazen IIS Express'i onardıktan ve My Docs\IISExpress
klasörü sildikten sonra bazen çok hızlı bir şekilde yüklenebilmesidir . Sonunda "bir şey" olur ve tekrar yüklenmesi 2 dakikaya kadardır. Üzerinde çalıştığım şey karmaşık bir proje değil. Harici kütüphaneler veya bağımlılıklar yoktur ve VS.NET'imin eklentileri yoktur.
Dikkat çeken bu makine, tahribat yaratan bir geçmişi olan Symantec Endpoint Protection'a sahiptir. Ancak bunu açıkça devre dışı bırakmak (yönetici olmak iyidir) sorunu çözmedi.
Bu noktada bir teorim var. Ben tüm bu düşünüyorum çünkü bir ağ paylaşımı kapalı yeniden yönlendirilmiş bir klasör üzerinde çalışıyorum. Hata ayıklayıcı yüzlerce "yüklü sembol" satırından geçerken, ne yaptığını görmek için durdum. Benim kodumda, DisplayTemplate yüklediğim vardı. Şablon çıktısına adım atmak bu:
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'
Görünüşe göre Visual Studio, her çağrıldığında ekran şablonumu yeniden derliyor , yani yine yüzlerce kez. Benim teorim, Visual Studio dosyayı derler, ağ paylaşımına kaydeder, ağ paylaşımı daha sonra bir şekilde yeni bir zaman damgalar ve Visual Studio sonra dosyanın değiştiğini düşünüyor ve böylece Visual Studio yine yeniden derler. Sadece bir teori olsa da; Gerçekten hiçbir fikrim yok.
Birincisi, görünüşe göre çevrimdışı dosyalarım var (bu bir ofiste bir masaüstü bilgisayar; daha az umursamadım). Yarın devre dışı bırakacağım, yeniden başlatacağım ve tekrar deneyeceğim.
Ayrıca, projemi olduğu gibi yerel C'ye taşımak: düzeltiyor. Çok hızlı yüklenir. Ancak bu bir çalışma ortamı için ideal değildir. Önceki Sürümleri kaybediyorum, manuel olarak kopyalamadığım sürece kodum hiç yedeklenmiyor ve artık kimseyle paylaşılmıyor.
Gelirse, C'den ağ paylaşımına ileri geri kopyalayarak bunu yapabilirim. Her sayfa yüklemesi için iki dakika beklemek çok daha can sıkıcı bir durum.