c# - 每个文件在 ASP.NET MVC 站点上的初始加载都很慢

标签 c# asp.net-mvc iis compilation

我有一个 ASP.NET MVC 网站,我已经验证它在每次第一次点击新的 C# 文件(如 Controller )时都在编译。我查看了任务管理器,每次第一次点击新 Controller 时,页面都很慢,由于编译器,CPU 达到峰值。

我之前使用过 Rosyln 编译器,但我没有做任何更改就切换回了常规的 C# 编译器。

我尝试过预编译,但是当我将我的网站复制到网络托管计算机时似乎并不重要。

我不记得在我使用过的以前版本的应用程序中发生过这种情况,但其中大部分主要是 ASP.NET 表单与 MVC 的混合。

这是正常行为还是我可以通过设置来纠正?我希望它在首次部署站点时编译所有文件。 (实际上,第一页太长了,我不确定它是如何不这样做的)

现在,我有一个脚本,可以在我部署应用程序后访问每个 Controller ,从而避免出现问题。

要复制,只需将一个新的主 dll 复制到您的 bin 文件夹中。然后在您浏览具有不同 Controller 的不同页面时查看您的任务管理器。

最佳答案

  • 您可以使用缓存来改善您的应用程序偏好。请阅读 this article .
  • 您还可以涉及应用程序初始化和 IIS 始终运行。为此,您需要设置 startMode您的应用程序池始终运行,这将阻止您的应用程序池在一段时间后休眠。

    有关更多信息,请阅读以下帖子:
  • iis-80-application-initialization
  • use-iis-application-initialization-for-keeping-aspnet-apps-alive
  • 您始终可以固定应用程序以保持事件状态(注意:- 如果您在云中运行,这不是一个好主意。但在共享主机或专用服务器中运行良好(已测试))。

  • 示例:
    public class RecycleConfig
    {
        public static void PingSite()
        {
            using (var refresh = new WebClient())
            {
                try
                {
                    refresh.DownloadString("http://yoursote.com");
                }
                catch (Exception)
                {
    
                }
            }
        }
    
        public static void SetupRefreshJob()
        {
            if (HttpContext.Current == null) return;
    
            //remove a previous job
            Action remove = HttpContext.Current.Cache["Refresh"] as Action;
            if (remove is Action)
            {
                HttpContext.Current.Cache.Remove("Refresh");
                remove.EndInvoke(null);
            }
    
            //get the worker
            Action work = () =>
            {
                while (true)
                {
                    Thread.Sleep(600000);
                    PingSite();
                }
            };
            work.BeginInvoke(null, null);
    
            //add this job to the cache
            HttpContext.Current.Cache.Add("Refresh",
                         work,
                         null,
                         Cache.NoAbsoluteExpiration,
                         Cache.NoSlidingExpiration,
                         CacheItemPriority.Normal,
                         (s, o, r) => { SetupRefreshJob(); }
              );
        }
    }
    

    Global.asax添加 -
        protected void Application_Start()
        {
    
            RecycleConfig.SetupRefreshJob();
            /........
            /........
        }
    
        protected void Application_End(object sender, EventArgs e)
        {
            RecycleConfig.PingSite();
        }
    

    关于c# - 每个文件在 ASP.NET MVC 站点上的初始加载都很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61830144/

    相关文章:

    c# - 如何使用SDK检测Azure存储类型?

    C# ASP.NET Web Api Controller - 使用 SqlCommand 从表中获取所有行

    iis - 如何将 WebDeploy 与 ASP.Net core 结合使用

    iis - 如何通过 WMI 使用网络共享创建 IIS 虚拟目录

    c# - Main 之前的异常

    c# - 在提示用户提及缺少的实体后,我如何使用 luis 操作绑定(bind)来触发意图

    jquery - 将单个表行设为红色(MVC 5/Bootstrap 3)

    sql - Azure ASP.Net MVC 数据库部署最佳实践

    c# - 模板只能与字段访问、属性访问、一维数组索引错误一起使用

    IIS 7.5 和 Web API 2 PUT/DELETE 请求