.NET platformuna dayalı siteler geliştiriyorum. Bu siteleri genellikle yerel IIS'imde dağıtırım, böylece yayınlanmadan önce onları test edebilir ve işlevlerini görebilirim. Ancak, pencereleri her yeniden başlattığımda, sitelerin ilk kez çalıştırılması uzun zaman alıyor gibi görünüyor.
JIT'i biliyorum ve ayrıca bu sor farkındayım, ama soruma cevap vermiyor.
Pencereleri her yeniden başlattığınızda JIT oluyor mu? W3wp.exe sürecinin oluşturulması ile ilgili mi? Siteler her yeniden başlatmadan sonra ilk istek için neden bu kadar yavaş?
Bu sorun JIT derlemesidir. Uygulama havuzu kütüphaneleri işlemeye başlamadan önce oluşturmak için zamana ihtiyaç duyar. Bu bir ısınma komut dosyası kullanılarak hızlandırılabilir, ancak olması gereken bir şey. Ayrıca bir web sitesi veya web uygulaması projesi kullanıp kullanmadığınıza da bağlıdır. Bir web sitesi her sayfa için JIT'dir, bu nedenle ilk isabet yavaştır ve her yeni sayfa isabeti de ekstra bir derleme süresine sahiptir. Web uygulaması projeleri önceden derlenmiştir, bu nedenle bu isabetin kötü bir şekilde etkilenmemesi gerekir, ancak kütüphanelerin hala yüklenmesi gerekir. Ne kadar çok kütüphane/araç varsa, bu isabet o kadar kötü olur. İşte ısınmayı tartışan bazı bağlantılar:
http://weblogs.asp.net/gunnarpeipman/archive/2010/01/22/iis-application-warm-up-module.aspxhttp: //blogs.iis. net/steveschofield/arşiv/2009/05/30/application-pool-warm-up.aspxhttps://stackoverflow.com/questions/2063461/iis-web-applications-warmuphttp://sharepoint.smayes.com/2011/06/application-pool-specific-warm-up-scripts/
İlk isteğinizdeki yavaş tepki, IIS bir siteyi veya uygulama havuzunu ilk gelen isteği üzerine başlatır/yükler ve sabit bir süre sonra sunucuya yeni gelen istek gelmez = IIS siteyi tekrar durdurur (uygulama havuzu geri dönüşümü).
ASP.NET 4.0'da otomatik başlatma adı verilen yeni bir özellik vardır. Bu özellik sayesinde, bir uygulama havuzu veya tek bir siteyi herhangi bir istekden önce başlayacak şekilde ayarlayabilirsiniz. Bu, önyükleme zamanında (IIS başladığında) veya bir ASP.NET sitesini (siteyi durduran) güncellediğinizde tetiklenir.
<applicationPools> <add name="MyAppPool" managedRuntimeVersion="v4.0" startMode="AlwaysRunning" /> </applicationPools> <sites> <site name="MySite" id="1"> <application path="/" serviceAutoStartEnabled="true" /> </site> </sites>
Bunu kullanmak için IIS 7.5 gerekir.
Otomatik başlatma başladığında bazı ekstra görevleri gerçekleştirme seçeneği de vardır, örn. verileri önbelleğe önceden yüklemek için.
Sorunun bir kısmı da GAC. Kütüphaneler, her yüklendiklerinde güvenlik kontrolünün yapılmasını gerektirir - bu, bir sürü şifreleme türü çalışmanın gerçekleştirildiği anlamına gelir ve bu, işleri çok yavaşlatır. MS'den bir süre önce bu sorunu tanımlayan WPF performansı hakkında bir konuşma yapıldı - cevapları "GAC'ye yardım edemezseniz bir şey koymayın"
IIS, düşük trafikli web siteleri için sinir bozucu (bazen) bir özelliğe sahiptir. Kullanılmayan işçi işlemlerini geri dönüştürür - bu da sitenin ilk kullanıcısına neden olur; bazen çok uzun gecikme (30+ saniye). http://dotnettimes.wordpress.com/2014/03/24/fixing-slow-initial-load-for-iis-web-site/