2016-10-11 4 views
5

Для того, чтобы поддержать C# 6 в наших взглядах на бритвенные MVC5, мы свернули на платформе компилятор Рослин через web.config:Избегайте попадания в VBCSCompiler на ролики ASP.NET Razor MVC от Roslyn?

<system.codedom> 
    <compilers> 
     <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" /> 
    </compilers> 
</system.codedom> 

Однако после развертывания производства, каждый вид/контроллер, похоже, заметно " Первая загрузка ", которая хуже, чем без включения этого компилятора.

Важно отметить, что эта задержка в дополнение к обычной задержке JIT, которую вы получаете с нового развертываемого сайта. Страницы заметно медленнее, а VBCSCompiler.exe работает в фоновом режиме для «дальнейшей компиляции» этих страниц.

Есть ли наилучшая практика для предварительной компиляции/оптимизации этой ситуации, чтобы исключить развертывание послезадержки при загрузке с первой загрузкой? В идеале VBCSCompiler.exe не запускается после развертывания и выполняется во время сборки.

Я видел упоминания aspnet_compiler.exe и столкнулся с StackExchange.Precompilation (см. https://blog.stackoverflow.com/2015/07/announcing-stackexchange-precompilation/) и задаюсь вопросом, правильно ли это исправление.

Есть ли у кого-нибудь опыт в этой конкретной проблеме? Спасибо.

ответ

1

Вы можете использовать RoslynRazorViewEngine from StackExchange.Precompilation:

ViewEngines.Engines.Clear(); 
ViewEngines.Engines.Add(new RoslynRazorViewEngine()); 

Основная цель этого вида двигателя, однако, не, чтобы избавиться от запуска перфорация удара. С его помощью вы получаете поддержку C# 6. Представления еще должны быть скомпилированы при первой загрузке, но сборки roslyn впоследствии попадают в домен приложения, и вы получаете более высокий объем памяти. Поскольку roslyn вызывается в приложении, вам не нужны специальные разрешения на веб-сервере для выполнения другого .exe из папки /bin. В основном мы используем это для разработки на наших машинах.

Я настоятельно рекомендую вам всего precompile all the views. Таким образом, вы не получаете начального перфоманса, и вы получаете возможность проверять время вашего просмотра. Вы даже можете запустить анализаторы на сгенерированном коде просмотра. Это то, что StackOverflow в настоящее время работает на производстве.

В этом сообщении в блоге упоминается , потому что это оригинальный инструмент для предварительной компиляции на ASP.NET (без MVC). К сожалению, это очень медленно.

0

Если сборки компилятора Roslyn не являются NGen'd, для запуска VBCScompiler.exe может потребоваться некоторое время (он ссылается на несколько крупных управляемых сборок, и для их JIT требуется время). Чтобы сократить период JIT, вы можете NGEN собрать все сборки Rsolyn на машине. Также вы можете найти справочную информацию от this blog.