Я в дотепному кінці. 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: "Contact", "Location" та "StatusCode". Видається, що IIS завантажує символи двічі за кожен виклик шаблону дисплея. Таким чином, якщо я показую таблицю з 100 записів, яка викликає всі три з цих шаблонів відображення, це завантажено 600 окремих символів.
Це теж не швидка операція. Переглядаючи файли журналів, які створює IIS, для завантаження кожного символу потрібно близько 200 мс. Таким чином, наддовгі затримки.
Що я пробував:
- Налагодження або версія версії, це не має значення.
- Поставлення мого проекту на повну реалізацію 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 ще раз перекомпілює його. Тільки теорія, хоча; У мене справді немає поняття.
Для одного, мабуть, у мене немає автономних файлів (це настільний комп’ютер в офісі; мені не можна було менше турбуватися). Я відключу, перезавантажую і повторюю завтра.
Плюс переміщення мого проекту, як і до місцевого C: виправляє його. Завантажується дуже швидко. Але це не ідеально в робочих умовах. Я втрачаю попередні версії, мій код взагалі не створюється резервна копія, якщо я не скопіюю його вручну, і він більше ні з ким не ділиться.
Я можу зробити те, щоб скопіювати його назад і назад з C на мережеву частку, якщо вона дійшла до неї. Набагато прикро більше чекати дві хвилини для кожного завантаження сторінки.