为什么我的ASP.NET Web窗体的Load事件要花这么长时间? [英] Why is my ASP.NET web form Load event taking so long?

查看:290
本文介绍了为什么我的ASP.NET Web窗体的Load事件要花这么长时间?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个正在接近30秒加载一个ASP.NET 2.0 Web窗体。我想弄清楚到底是怎么回事。我已经启用了跟踪,并把在一大堆Trace.Write语句,所以我希望能看到是怎么回事。结果是非常奇怪的。他们看起来像这样...

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

因此​​,所有我放在跟踪语句(MyEvent1,MyEvent2,MyEvent3)火得非常快。我放在最后一丝声明是正确的在Page_Load事件的结束。因此,谁能告诉我什么可能就在Page_Load事件,但最终负载发生前的最后陈述后,是这样吗?我想不出这可能是造成这这么久。是否有一些其他的方式,我可以解决什么Page_Load事件中发生?

更新 - 添加code

 保护无效的Page_Load(对象发件人,EventArgs的发送)
     {
        Trace.Write(启动页面加载);        如果(!Page.IsPostBack)
        {
            Trace.Write(定身标签和Meta标签);
            HtmlGenericControl _mainBodyTag =(HtmlGenericControl)Page.FindControl(mainBodyTag);
            _mainBodyTag.Attributes [类] =钻会员制;            HtmlMeta _meta =新HtmlMeta();
            _meta.Name =publication_date;
            _meta.Content = Sitecore.Context.Item.Statistics.Updated.ToShortDateString();
            Page.Header.Controls.Add(_meta);            Trace.Write(绑定数据);
            this.BindData();
        }
    }    保护无效BindData()
    {
        //特征
        Trace.Write(设置特色项目信息);
        litFeatureType.Text =报告;
        hypTitle.Text = _feature.Fields [标题]值。
        hypTitle.NavigateUrl = LinkManager.GetItemUrl(_Feature);
        HY preadMore.NavigateUrl = LinkManager.GetItemUrl(_Feature);
        hypFeature.NavigateUrl = LinkManager.GetItemUrl(_Feature);
        。litFeatureText.Text = _feature.Fields [SHORTDESCRIPTION]值;
        litDate.Text =((的DateField)_feature.Fields [RELEASEDATE])DateTime.ToShortDateString()。
        litLocation.Visible = FALSE;
        pnlMeeting.Visible = FALSE;        //新闻
        Trace.Write(获得会员新闻);
        清单<项目> _memberNews = _repository.GetMemberNews();
        rptNews.DataSource = _memberNews;
        rptNews.DataBind();        //左下
        Trace.Write(获得左下内容);
        项目_home = Sitecore.Context.Database.SelectSingleItem(/ Sitecore的/内容/家庭);
        litLowerLeftContent.Text = _home.Fields [左下内容]值。        //右下
        Trace.Write(获得右下内容);
        。litLowerRightContent.Text = _home.Fields [右下的内容]值;        //其他成员资源
        Trace.Write(获取会员资源项目);
        项目_memberHome = Sitecore.Context.Database.SelectSingleItem(/ Sitecore的/内容/首页/会员);
        rptMenu1.DataSource = _memberHome.Children;
        rptMenu1.DataBind();        //会员统计
        Trace.Write(获得会员的统计);
        清单< MembershipStat> _stats = _repository.GetMembershipStats();
        rptStats.DataSource = _stats;
        rptStats.DataBind();
        litTotal.Text = _totalCount.ToString();        //铁含量
        litRailContent.Text = _home.Fields [对铁路中间的内容]值。        Trace.Write(成品);
    }

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

 绑定数据0.000103338345864662 0.000069
设置的精选项目信息0.000174093984962406 0.000051
获得会员新闻0.000461293233082707 0.000287
获取左下内容0.0328178270676692 0.032357
获得右下内容0.0333527706766917 0.000535
获取会员资源项目0.0333826090225564 0.000030
获得会员的统计0.130918973684211 0.097536
成品0.244487176691729 0.023386
aspx.page结束负载23.9897560037594 23.745269
aspx.page开始LoadComplete 23.9898036541353 0.000048
aspx.page结束LoadComplete 23.9898190150376 0.000015
aspx.page开始preRender 23.9898322293233 0.000013
aspx.page结束preRender 23.9901133834586 0.000281
aspx.page开始preRenderComplete 23.9901457819549 0.000032
aspx.page结束preRenderComplete 23.9901602744361 0.000014
aspx.page开始即时存档24.0240230714286 0.033863
aspx.page结束即时存档24.0283510075188 0.004328
aspx.page开始SaveStateComplete 24.0283821616541 0.000031
aspx.page结束SaveStateComplete 24.0283963759398 0.000014
aspx.page开始渲染24.0284089849624 0.000013
aspx.page结束渲染24.0736610977444 0.045252


解决方案

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

I have an ASP.NET 2.0 web form that is taking almost 30 seconds to load. I am trying to figure out what is going on. I have enabled tracing and put in a whole bunch of Trace.Write statements so I can hopefully see what is going on. The results are very strange. They look like this...

aspx.page Begin Load 0.000245093984962406
MyEvent1 0.000446804511278195
MyEvent2 0.000464654135338346
MyEvent3 0.000477984962406015
aspx.page End Load 23.9897560037594

So all of the Trace statements that I put in (MyEvent1, MyEvent2, MyEvent3) fire very quickly. The last Trace statement that I put in is right at the end of the Page_Load event. So can anyone tell me what might be happening right after the final statement in the Page_Load event but before the End Load happens? I can't figure out what could be causing this to take so long. Is there some other way I can troubleshoot what is happening during the Page_Load event?

UPDATE - Adding code

     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");
    }

Updated - Adding trace output example:

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

解决方案

Are you using a master page? Any user controls or custom server controls on the page? If so, you may want to investigate the Page_Load in those controls.

这篇关于为什么我的ASP.NET Web窗体的Load事件要花这么长时间?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆