Я управляю ASP.NET MVC
приложением, которое использует (в основном) .NET MVC
и Entity Framework
. Я замечаю, что каждый раз, когда я публикую сайт, это занимает очень много времени (около 10-15 секунд) каждый раз, когда я загружаю (впервые) каждую Controller/Action
.
Я думал, что это какая-то проблема Entity
, поэтому я создал пустую TestController/Index
и поместил простой код View
:
// Controller
public class TestController : Controller
{
public ActionResult Index()
{
return View();
}
}
// View Index.cshtml
test page controller Page generated in @((DateTime.UtcNow - HttpContext.Current.Timestamp.ToUniversalTime()).TotalSeconds.ToString("F4")) seconds
Чем я публикую сайт, используя Visual Studio
(FTP
mode).
После публикации я вызываю из браузера отдельную / общую / общедоступную страницу (например, Home/Index
), пытаясь «загрузить / собрать» приложение в первый раз; это действительно потребует немного времени, из-за сборки и тому подобного, но это нормально).
Теперь: когда я пытаюсь загрузить пустое TestController
, это все равно занимает много времени:
![enter image description here](https://i.stack.imgur.com/zqaYh.png)
Как это возможно? Компилирует ли он каждый контроллер отдельно? Таким образом, каждый раз, когда я загружаю новый контроллер (после публикации сайта или повторного запуска пула), это занимает такое количество времени? Наверное, я не прав ...
Второй раз, когда я загружаю его (и следующий) очень быстро:
![enter image description here](https://i.stack.imgur.com/SwFih.png)
Как я могу это исправить? Где может быть проблема?
Обратите внимание - это мой Global.asax
, который не должен выгравировать:
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
protected void Application_PostAuthenticateRequest(Object sender, EventArgs e)
{
HttpCookie authCookie = Request.Cookies["CookieFA"];
if (authCookie != null)
{
FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);
CustomPrincipal principal = new CustomPrincipal(authTicket.Name);
CustomPrincipalSerializeModel userSerializeModel = JsonConvert.DeserializeObject<CustomPrincipalSerializeModel>(authTicket.UserData);
principal.UserID = userSerializeModel.ID;
principal.FirstName = userSerializeModel.FirstName;
principal.LastName = userSerializeModel.LastName;
principal.Roles = userSerializeModel.RoleName.ToArray<string>();
HttpContext.Current.User = principal;
}
}
}