2016-10-11 8 views
5

आदेश MVC5 पर हमारे विचारों में उस्तरा सी # 6 का समर्थन करने के लिए, हम रोसलिन संकलक मंच पर दिया web.config के माध्यम से:Roslyn संचालित एएसपी.NET रेजर एमवीसी विचारों पर VBCSCompiler perf हिट से बचें?

<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> 

हालांकि, उत्पादन की तैनाती के बाद, प्रत्येक दृश्य/नियंत्रक एक ध्यान देने योग्य "प्रतीत होता है पहला लोड "देरी जो इस कंपाइलर को सक्षम किए बिना खराब है।

महत्वपूर्ण रूप से, यह देरी नियमित रूप से जेआईटी देरी के अतिरिक्त है जो आपको तैनात एक नई साइट से प्राप्त होती है। पृष्ठ स्पष्ट रूप से धीमे होते हैं, जबकि ऐसा लगता है कि 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()); 

इस दृश्य इंजन के मुख्य लक्ष्य, तथापि, नहीं हिट पर्फ़ स्टार्टअप से छुटकारा पाने के लिए है। इसके साथ आप बस सी # 6 समर्थन प्राप्त करते हैं। विचारों को अभी भी पहले लोड पर संकलित किया जाना है, लेकिन बाद में ऐप डोमेन में रोसलीन असेंबली समाप्त हो जाती है, और आपको उच्च मेमोरी पदचिह्न मिलता है। चूंकि ऐप में रोस्लिन को बुलाया जाता है, इसलिए आपको /bin फ़ोल्डर से .exe निष्पादित करने के लिए वेब सर्वर पर विशेष अनुमतियों की आवश्यकता नहीं है। हम ज्यादातर हमारी देव मशीनों पर विकास के लिए इसका इस्तेमाल करते हैं।

मैं आपको केवल precompile all the views की सलाह देता हूं। इस तरह आपको स्टार्टअप परफ हिट नहीं मिलता है, और आप अपने विचारों का संकलन समय सत्यापन प्राप्त करते हैं। आप उत्पन्न दृश्य कोड पर विश्लेषकों को भी चला सकते हैं। स्टैक ओवरव्लो वर्तमान में उत्पादन में चलता है।

मैं उस ब्लॉग पोस्ट में aspnet_compiler.exe का उल्लेख करता हूं, क्योंकि यह एएसपी.नेट (सैन्स एमवीसी) पर प्रीकंपिलेशन के लिए मूल उपकरण है। दुर्भाग्य से यह बहुत धीमी है।

0

यदि रोज़लिन कंपेलर असेंबली एनजीएनएड नहीं हैं, तो VBCScompiler.exe शुरू करने में कुछ समय लग सकता है (यह कई बड़ी प्रबंधित असेंबली का संदर्भ देता है और इसमें उन्हें जेआईटी का समय लगता है)। जेआईटी अवधि को कम करने के लिए, आप मशीन पर सभी रुलिन असेंबली एनजीएन कर सकते हैं। इसके अलावा आप this blog से कुछ सहायता जानकारी पा सकते हैं।

संबंधित मुद्दे