理解JIT;慢的网站

时间:2014-06-01 13:10:00

标签: asp.net publish jit

首先,这个问题已被覆盖了几次(我已经完成了我的研究),例如,在SO网页的右侧是一个相关项目的列表...我已经通过它们所有(或我能找到的)。

当我发布预编译的.NET Web应用程序时,第一次加载速度非常慢。

我已经读过这篇文章了,这是我理解的JIT(等等)。

问题是,在主页加载(最多20秒)后,许多其他页面的加载速度非常快。

然而,看起来他们加载的唯一原因是因为资源已被加载(或者他们共享相同的编译dll)。但是,有些页面仍需要很长时间。

这表明JIT可能需要以不同的方式编译不同的页面?如果是这样,并且使用联系表单作为示例(其中Thank You页面需要由JIT编译并且第一次很慢),用户可能会多次点击发送按钮,同时等待页面显示。

加载所有使用不同模型或不同共享HTML内容的页面后,网站会按预期快速加载。我认为这个问题是个常见问题?

请注意,我使用的是.NET 4.0,但是没有数据库,XML文件等。唯一的IO是如果电子邮件没有发送,它会将错误写入日志。

因此,假设我的理解是正确的,那么无需手动浏览网站并加载每个页面的方法是什么?

如果上面的内容有点过于宽泛,那么可以在Visual Studio(2012)的设置/配置或web.config文件中解析(不包括添加compilation debug=false)吗?

1 个答案:

答案 0 :(得分:0)

在这种情况下,有2个问题

  1. 根据rene的评论,请查看此http://msdn.microsoft.com/en-us/library/ms972959.aspx ...有用的部分是将以下代码添加到global.asax文件

    const string sourceName =“.NET Runtime”; const string serverName =“。”; const string logName =“Application”; const string uriFormat =“\ r \ n \ r \ nURI:{0} \ r \ n \ r \ n”; const string exceptionFormat =“{0}:\”{1} \“\ r \ n {2} \ r \ n \ r \ n”;

    void Application_Error(Object sender,EventArgs ea){     StringBuilder message = new StringBuilder();

    if (Request != null) {
        message.AppendFormat(uriFormat, Request.Path);
    }
    
    if (Server != null) {
        Exception e;
        for (e = Server.GetLastError(); e != null; e = e.InnerException) {
            message.AppendFormat(exceptionFormat, 
                                 e.GetType().Name, 
                                 e.Message,
                                 e.StackTrace);
        }
    }
    
    if (!EventLog.SourceExists(sourceName)) {
        EventLog.CreateEventSource(sourceName, logName);
    }
    
    EventLog Log = new EventLog(logName, serverName, sourceName);
    Log.WriteEntry(message.ToString(), EventLogEntryType.Error);
    
    //Server.ClearError(); // uncomment this to cancel the error
    

    }

  2. 发送电子邮件时服务器最大化!我的代码很好,但是,查看任务计划程序显示它达到了100%的内存......

  3. 解决方案是监控第1点显示的错误并进行修复。然后,找出发送电子邮件时服务器被限制的原因!