【问题标题】:Why is my ASP.NET web form Load event taking so long?为什么我的 ASP.NET Web 表单加载事件需要这么长时间?
【发布时间】:2010-01-23 07:18:46
【问题描述】:

我有一个 ASP.NET 2.0 Web 表单,加载时间将近 30 秒。我试图弄清楚发生了什么。我启用了跟踪并放入了一大堆 Trace.Write 语句,这样我就可以看到发生了什么。结果很奇怪。它们看起来像这样......

aspx.page 开始加载 0.000245093984962406
MyEvent1 0.000446804511278195
MyEvent2 0.000464654135338346
MyEvent3 0.000477984962406015
aspx.page 结束加载 23.9897560037594

因此,我放入的所有 Trace 语句 (MyEvent1, MyEvent2, MyEvent3) 都会很快触发。我输入的最后一条 Trace 语句正好位于 Page_Load 事件的末尾。那么谁能告诉我在 Page_Load 事件的最后语句之后但在 End Load 发生之前可能会发生什么?我无法弄清楚是什么导致这需要这么长时间。有没有其他方法可以解决 Page_Load 事件期间发生的问题?

更新 - 添加代码

     protected void Page_Load(object sender, EventArgs e)
     {
        Trace.Write("Starting Page Load");

        if (!Page.IsPostBack)
        {
            Trace.Write("Setting Body Tag and Meta Tags");
            HtmlGenericControl _mainBodyTag = (HtmlGenericControl)Page.FindControl("mainBodyTag");
            _mainBodyTag.Attributes["class"] = "drill membership";

            HtmlMeta _meta = new HtmlMeta();
            _meta.Name = "publication_date";
            _meta.Content = Sitecore.Context.Item.Statistics.Updated.ToShortDateString();
            Page.Header.Controls.Add(_meta);

            Trace.Write("Binding data");
            this.BindData();
        }
    }

    protected void BindData()
    { 
        //Feature
        Trace.Write("Setting Featured Item Info");
        litFeatureType.Text = "Report";
        hypTitle.Text = _feature.Fields["Title"].Value;
        hypTitle.NavigateUrl = LinkManager.GetItemUrl(_feature);
        hypReadMore.NavigateUrl = LinkManager.GetItemUrl(_feature);
        hypFeature.NavigateUrl = LinkManager.GetItemUrl(_feature);
        litFeatureText.Text = _feature.Fields["ShortDescription"].Value;
        litDate.Text = ((DateField)_feature.Fields["ReleaseDate"]).DateTime.ToShortDateString();
        litLocation.Visible = false;
        pnlMeeting.Visible = false;

        //News
        Trace.Write("Getting Member News");
        List<Item> _memberNews = _repository.GetMemberNews();
        rptNews.DataSource = _memberNews;
        rptNews.DataBind();

        //Lower Left
        Trace.Write("Getting lower left content");
        Item _home = Sitecore.Context.Database.SelectSingleItem("/sitecore/Content/Home");
        litLowerLeftContent.Text = _home.Fields["Lower Left Content"].Value;

        //Lower Right
        Trace.Write("Getting lower right content");
        litLowerRightContent.Text = _home.Fields["Lower Right Content"].Value;

        //Other Member Resources
        Trace.Write("Getting member resources items");
        Item _memberHome = Sitecore.Context.Database.SelectSingleItem("/sitecore/Content/Home/Member");
        rptMenu1.DataSource = _memberHome.Children;
        rptMenu1.DataBind();

        //Membership Stats
        Trace.Write("Getting membership stats");
        List<MembershipStat> _stats = _repository.GetMembershipStats();
        rptStats.DataSource = _stats;
        rptStats.DataBind();
        litTotal.Text = _totalCount.ToString();

        //Rail Content
        litRailContent.Text = _home.Fields["Right Rail Middle Content"].Value;

        Trace.Write("Finished");
    }

更新 - 添加跟踪输出示例:

Binding data    0.000103338345864662    0.000069
Setting Featured Item info  0.000174093984962406    0.000051
Getting Member News 0.000461293233082707    0.000287
Getting lower left content  0.0328178270676692  0.032357
Getting lower right content 0.0333527706766917  0.000535
Getting member resources items  0.0333826090225564  0.000030
Getting membership stats    0.130918973684211   0.097536
Finished    0.244487176691729   0.023386
aspx.page   End Load    23.9897560037594    23.745269
aspx.page   Begin LoadComplete  23.9898036541353    0.000048
aspx.page   End LoadComplete    23.9898190150376    0.000015
aspx.page   Begin PreRender 23.9898322293233    0.000013
aspx.page   End PreRender   23.9901133834586    0.000281
aspx.page   Begin PreRenderComplete 23.9901457819549    0.000032
aspx.page   End PreRenderComplete   23.9901602744361    0.000014
aspx.page   Begin SaveState 24.0240230714286    0.033863
aspx.page   End SaveState   24.0283510075188    0.004328
aspx.page   Begin SaveStateComplete 24.0283821616541    0.000031
aspx.page   End SaveStateComplete   24.0283963759398    0.000014
aspx.page   Begin Render    24.0284089849624    0.000013
aspx.page   End Render  24.0736610977444    0.045252

【问题讨论】:

  • 在代码中搜索“Thread.Sleep(20);”。如果找到,请将其更改为较小的数字,例如 10
  • 说真的,我能想到的唯一会导致这将是某种网络问题;您是否有任何模块/其他代码在服务器网络上请求资源?
  • Global.asax 中的管道事件有什么奇怪的处理程序吗?或者,您的 IIS 是否注册了任何自定义 ISAPI 模块?

标签: asp.net trace


【解决方案1】:

您使用的是母版页吗?页面上有任何用户控件或自定义服务器控件吗?如果是这样,您可能需要调查这些控件中的 Page_Load。

【讨论】:

  • 原来这个页面上还有其他我不知道的自定义服务器控件。我在这些控件中发现了有问题的代码。
【解决方案2】:

如果可能,请考虑将远程调试会话附加到您的生产服务器。然后,您应该能够设置断点等,并查看到底发生了什么。

【讨论】:

  • 这将阻止服务器处理请求。
猜你喜欢
  • 1970-01-01
  • 2019-11-13
  • 2012-05-11
  • 1970-01-01
  • 1970-01-01
  • 2011-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多