【问题标题】:ItemDataBound slowing my page renderingItemDataBound 减慢了我的页面渲染速度
【发布时间】:2017-08-30 21:10:00
【问题描述】:

1我在这里的第一个问题,如果我不精通技术语言,请原谅,因为我是来自深非洲莫桑比克的自学成才的开发人员,感谢这个网站。

我的问题是我有一个

public void topicView_ItemDataBound(object sender,e)

在我为带有转发器的特定 aspx 页面后面的代码中,该页面从数据表接收其信息(如果我的术语正确的话)。ItemDataBound 事件是将我的控件安排在转发器中,以便隐藏、禁用和根据确定的标准显示其他控制。现在我注意到 ItemDataBound 事件将我的页面加载时间减慢了大约 20 到 40 秒,这非常糟糕,即使在回发时也是如此。当我删除 ItemDataBound 事件时。我运行平稳。但是我不能在没有 ItemDataBound 事件的情况下工作,因为它是我知道如何安排具有交替条件的中继器的唯一方法。这是一个快速回答的常见问题还是我应该发布我的完整代码?这只发生在此事件的 2 页上。如果有任何帮助,我正在使用 c#。 net.4.5

public void topicView_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            // Show or hid div here
            HiddenField MediaType = (HiddenField)e.Item.FindControl("MediaType");
            HiddenField PageAdmin = (HiddenField)e.Item.FindControl("PageAdmin");
            HiddenField f1 = (HiddenField)e.Item.FindControl("F1");
            HiddenField PP = (HiddenField)e.Item.FindControl("PP");
            HiddenField isread= (HiddenField)e.Item.FindControl("isread");
            HiddenField tread = (HiddenField)e.Item.FindControl("tread");

            // Label Label2 = (Label)e.Item.FindControl("Label2");
            // Label2.Text = myDDL.Value;
            System.Web.UI.HtmlControls.HtmlContainerControl image_video = (System.Web.UI.HtmlControls.HtmlContainerControl)e.Item.FindControl("image_video");

            System.Web.UI.HtmlControls.HtmlContainerControl image_pic = (System.Web.UI.HtmlControls.HtmlContainerControl)e.Item.FindControl("image_pic");
            System.Web.UI.HtmlControls.HtmlContainerControl PP1 = (System.Web.UI.HtmlControls.HtmlContainerControl)e.Item.FindControl("PP1");
            System.Web.UI.HtmlControls.HtmlContainerControl userpic = (System.Web.UI.HtmlControls.HtmlContainerControl)e.Item.FindControl("userpic");
            System.Web.UI.HtmlControls.HtmlContainerControl compic = (System.Web.UI.HtmlControls.HtmlContainerControl)e.Item.FindControl("compic");
            System.Web.UI.HtmlControls.HtmlContainerControl userpic2 = (System.Web.UI.HtmlControls.HtmlContainerControl)e.Item.FindControl("userpic2");
            System.Web.UI.HtmlControls.HtmlContainerControl compic2 = (System.Web.UI.HtmlControls.HtmlContainerControl)e.Item.FindControl("compic2");
            System.Web.UI.HtmlControls.HtmlContainerControl pf = (System.Web.UI.HtmlControls.HtmlContainerControl)e.Item.FindControl("pf");
            System.Web.UI.HtmlControls.HtmlContainerControl attach = (System.Web.UI.HtmlControls.HtmlContainerControl)e.Item.FindControl("attach");

            LinkButton LinkButton3 = (LinkButton)e.Item.FindControl("LinkButton3");
            LinkButton LinkButton1 = (LinkButton)e.Item.FindControl("LinkButton1");
            Label Label4 = (Label)e.Item.FindControl("Label4");
            Label Label10 = (Label)e.Item.FindControl("Label10");

            System.Web.UI.WebControls.Image readsign = (System.Web.UI.WebControls.Image)e.Item.FindControl("readsign");
            System.Web.UI.WebControls.Image Image2 = (System.Web.UI.WebControls.Image)e.Item.FindControl("Image2");

            if (MediaType.Value == "video")
            {
                image_video.Visible = false;
                image_pic.Visible = true;
                Image2.ImageUrl = "~/images/readmail.png";

            }


            if (MediaType.Value == "image")
            {
                image_video.Visible = true;
                image_pic.Visible = false;

            }

            if (MediaType.Value == "" ) { attach.Visible = false; } else { attach.Visible = true; }

            if (PageAdmin.Value == "False")
            {
                compic.Visible = false;
                userpic.Visible = true;
                userpic2.Visible = true;
                compic2.Visible = false;
            }
            if (PageAdmin.Value == "True")
            {
                userpic.Visible = false;
                compic.Visible = true;
                userpic2.Visible = false;
                compic2.Visible = true;
            }

            if (isread.Value == "True")
            {
                readsign.ImageUrl = "~/images/readmail.png";
                Label4.Text = "foi lido ";
                Label10.Text = tread.Value;
             }
     }

}

以及我的转发器的 aspx 代码:

 <asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSource1" 
 OnItemDataBound="topicView_ItemDataBound"><ItemTemplate> 
 <div id="messages" style="margin-bottom: 10px">
    <asp:HiddenField ID="Status" runat="server" 
 Value='<%#""+Eval("Isreplyed") %>' />
    <asp:HiddenField ID="Pageadmin" runat="server" 
 Value='<%#""+Eval("PageAdmin") %>'/>
    <asp:HiddenField ID="MediaType" runat="server" 
Value='<%#""+Eval("MediaType") %>' />
    <asp:HiddenField ID="isread" runat="server" Value='<%#""+Eval("Isread") 
 %>' />
    <asp:HiddenField ID="tread" runat="server" Value='<%#""+Eval("tread","
 {0:d / MM " + "@" + " HH:mm}") %>' />
    <div id="Omsg" style="padding: 5px; border: thin solid #FFFFFF; box-
 shadow:rgba(255, 255, 255,0.9) 0 0 7px; background-color: #FFFFFF;border-
 radius:5px; " >
 <table style="width: 100%; text-align: left; margin-left: 0px;">
  <tr><td colspan="2">
      <asp:Image ID="readsign" runat="server" Height="25" Width="25" 
ImageUrl="~/images/newmail.png" />
      <asp:Label ID="Label4" runat="server" Text='<%# ""+Eval("Isreplyed") 
%>' Font-Size="X-Small" ForeColor="#999999"></asp:Label>&nbsp;&nbsp;&nbsp;
<asp:Label ID="Label10" runat="server" Text='<%#""+Eval("datesent","{0:d / 
MM " + "@" + " HH:mm}") %>' Font-Size="X-Small" ForeColor="#999999">
</asp:Label>
      </td></tr>         
   <tr>

                <td style="width: 66px; text-align: left;"><a id="pps" ><div 
id="compic" ClientIDMode="Static" runat="server"><img id="PP1" alt="" 
class="img-rounded" src='<%#"/ProfilePictures/"+Eval("logo") %>' 
style="width: 50px; height: 50px" /></div><input id="Hidden2" type="hidden" 
runat="server" value='<%#"/ProfilePictures/"+Eval("logo") %>' /></a>
                    <div id="userpic" clientidmode="Static" runat="server">

                        <img alt="" class="img-circle" 
src='<%#"/ProfilePictures/"+Eval("ProfilePicture") %>' style="width: 50px; 
height: 50px" />
                    </div><input id="Hidden3" type="hidden" runat="server" 
value='<%#"/ProfilePictures/"+Eval("ProfilePicture") %>' />

                     </td>
                <td style="line-height: 15px"> <div id="compic2" 
ClientIDMode="Static" runat="server"> <a  href='<%#"/Landing.aspx?
Restid="+Eval("id") %>' ><asp:Label ID="Label2" class="head" runat="server" 
Text='<%# ""+Eval("name") %>' Font-Size="Medium" ForeColor="#B9A47B">
</asp:Label> </a><a/><br/>
                      <asp:Label ID="CName" runat="server" 
Text='<%#""+Eval("slogan") %>' Font-Size="Smaller"></asp:Label>.   ...</div>
                     <div id="userpic2" ClientIDMode="Static" 
runat="server"><a  href='<%#"/Landing.aspx?Restid="+Eval("Username") %>' >
<asp:Label ID="Label8" class="head" runat="server" 
Text='<%#""+Eval("Username") %>' Font-Size="Large" ForeColor="#B9A47B">
</asp:Label> <a/><br/>
                      <asp:Label ID="Label9" runat="server" 
Text='<%#""+Eval("Job") %>' Font-Size="Smaller"></asp:Label></a>
                         <br />
                         <a/>
<a href='<%#"notificationmaster.aspx?BlogId="+Eval("Blogid") %>'> <asp:Label 
ID="Label5" runat="server" Text='<%# "Respondendo à publicação :  
"+Eval("BlogTitle") %>' Font-Size="smaller" ForeColor="#B9A47B"></asp:Label>
</a><br/>


                    </div>
                   <a/><span style="font-size: x-small; color: #999999"> 
enviado : </span><asp:Label ID="Label3" runat="server" 
Text='<%#""+Eval("datesent","{0:d MMMM yyyy - HH:mm}") %>' Font-Size="X-
Small" ForeColor="#999999"></asp:Label></a>
                    <br />
                   <div id="attach" ClientIDMode="Static" runat="server" > 
<asp:Label ID="Label17" runat="server" Text="Esta mensagem tem anexo" 
ForeColor="#999999" Font-Size="X-Small" Font-Underline="True">
</asp:Label>&nbsp; <img alt="" src="images/attach.png" style="width: 20px; 
height: 20px" /></div>
                </td>



            </tr>
  <tr>
 <td colspan="2">
&nbsp;
<br/>
<div id="msgbody" style="display: none">
<asp:Label ID="Label1" runat="server" Text='<%#""+Eval("mbody") %>'>
</asp:Label><br/>
 <div id="image_pic" ClientIDMode="Static" runat="server" >
            <asp:HiddenField ID="HiddenField1" runat="server" 
Value='<%#"/PostImages/"+Eval("image") %>' />
        <asp:Image ID="Image1" class="img-thumbnail" ClientIDMode="Static" 
runat="server" ImageUrl='<%#"/PostImages/"+Eval("image") %>' alt="Broken" 
Width="100%" />
           </div>
        <div id="image_video" runat="server" onclick="AddView" >
           <video id="PostVedio" runat="server" controls 
poster="/images/chimoioonline.png" src='<%#"/video/"+Eval("video") %>' 
style="width: 100%">
<source src="demo.mp4" type="video/mp4" />
<source src="demo.webm" type="video/webm"/>
<source src="demo.ogv" type="video/ogg"/>
<source src="demo.ogv" type="video/avi"/>             
<p>Fallback code if video isn't supported</p>/
</video></div></div>

 </td>
  </tr>
  <tr>
      <td colspan="2" style="text-align: right">
          <hr style="padding: 2px; margin: 5px" />

          <div id="deletm" style="display: inline-block">
              <input id="Hidden1" type="hidden" runat="server" 
 value='<%#Eval("id")%>' />
          <asp:LinkButton ID="LinkButton3" runat="server" CssClass="btn" 
 onclick="pmdelet" BorderColor="#CCCCCC" BorderWidth="1px"><img 
 src="/images/delete.png" alt="" style=" height: 15px" />
 </asp:LinkButton>&nbsp;&nbsp;<br />
              </div> 
          <div id="sendpm" style="display: inline-block">
              <input id="mido" type="hidden" runat="server" 
 value='<%#Eval("id")%>' />
              <input id="Hidden4" type="hidden" runat="server" 
value='<%#Eval("BlogId")%>' />
              <input id="sender2" type="hidden" runat="server" 
value='<%#Eval("sender")%>' />
              <asp:LinkButton ID="LinkButton1" runat="server" CssClass="btn" 
BorderColor="#CCCCCC" BorderWidth="1px" OnClientClick="" 
PostBackUrl='<%#"PMS.aspx?id=" + Eval("id") + "&BlogId=" + Eval("BlogId")+ 
"&sender=" + Eval("sender")%>' ><img src="images/pvtemail.png" alt="" 
style=" height: 15px" /></asp:LinkButton>&nbsp;&nbsp;
          </div>
          <div id="read" style="display: inline-block">
              <input id="H5" type="hidden" runat="server" 
value='<%#Eval("id")%>' />
              <input id="H7" type="hidden" runat="server" 
value='<%#"/ProfilePictures/"+Eval("logo") %>' />
              <input id="H8" type="hidden" runat="server" 
value='<%#"/ProfilePictures/"+Eval("ProfilePicture") %>' />
              <input id="H6" type="hidden" runat="server" 
value='<%#Eval("Isreplyed")%>' />
              <input id="H14" type="hidden" runat="server" 
value='<%#Eval("Username")%>' />
              <input id="H10" type="hidden" runat="server" 
value='<%#Eval("name")%>' />
              <input id="H13" type="hidden" runat="server" 
value='<%#Eval("Subject")%>' />
              <input id="H9" type="hidden" runat="server" 
value='<%#Eval("BlogTitle")%>' />
              <input id="H11" type="hidden" runat="server" 
value='<%#Eval("datesent","{0:d / MM " + "@" + " HH:mm}")%>' />
              <input id="H12" type="hidden" runat="server" 
value='<%#Eval("mbody")%>' />
              <input id="v5" type="hidden" runat="server" value='<%# 
Eval("video")%>' />
              <input id="p5" type="hidden" runat="server" 
value='<%#Eval("image")%>' />
               <input id="sender" type="hidden" runat="server" 
value='<%#Eval("sender")%>' />
               <input id="Hidden5" type="hidden" runat="server" 
value='<%#Eval("Blogid")%>' />
               <input id="PageAdmin2" type="hidden" runat="server" 
value='<%#Eval("PageAdmin")%>' />
              <asp:LinkButton ID="LinkButton2" runat="server" CssClass="btn"  
BorderColor="#CCCCCC" BorderWidth="1px" OnClientClick="return false"><img 
src="/images/read2.png" alt="" style=" height:15px" /></asp:LinkButton>

          </div>

      </td>
  </tr>
            </table>
     </div>

    <div id="Rmsg">

    </div>


</div>
</ItemTemplate></asp:Repeater>

My Server profiler screen shot

【问题讨论】:

  • 您必须分享一些代码,以便我们为您提供帮助
  • 可能有一个条件,即 itemDataBound 事件中的代码在每次调用时都会执行 SQL 服务器调用。在调试 itemDataBound 事件时,打开 SQL 服务器探查器并检查是否有大量 DB 命中。如果是这种情况,请尝试缓存数据库中的整个结果
  • @devzero 我是一个非常非常新手我没有得到你的评论,如果你把它放在更简单的英语中,我可以试试你说我应该做什么。

标签: c# asp.net


【解决方案1】:

这并不是真正的答案,而是让您更深入地研究问题所在的一种方式。 (而且评论太久了)

首先,您需要确保已安装 SQL Server 管理工具,尤其需要名为 SQL Server Profiler 的工具。

在分析器中,您转到“文件”“新跟踪”并连接到您的 SQL 服务器。

在 Trace 属性中,您只选择“RPC:completed”和“SQL:BatchCompleted”。

现在您可以运行您的 aspx 页面,并且您应该在分析器中查看该页面生成的所有 SQL 查询。您应该注意两件事。

首先,寻找长时间运行的查询。持续时间列以 MS 为单位,任何人都不应该超过 1000 毫秒。

其次,页面运行时运行的查询数。一个普通页面不应超过 20 个查询。通常,当您遇到问题时,您可能会运行数百个。

【讨论】:

  • 我努力使用论坛甲酸盐。但我上传了服务器分析器的结果,您将在我的问题的第一行看到一个指向图像“在此处输入图像描述”的链接。抱歉仍然很新
  • SQL 服务器分析器仅显示 2 个查询,FeedsCount_SP 和 Feeds_SP 正在运行,它们的总时间为 8 毫秒,因此您的问题不在于数据代码。您是否尝试过调试您的代码?如果您在 topicView_ItemDataBound 事件中看到 20 秒的减速,则它要么被调用且次数过多,要么其中的某些行需要 >1 秒才能运行。在单步执行代码时,这两种情况都应该很容易发现。如果您没有以这种方式发现它,请尝试使用性能分析器。
  • 好的,谢谢@devzero 现在采取下一步行动,学习逐步执行代码也许你可以告诉我这是如何完成的??
  • 这会加深您的设置,但如果您从 Visual Studio 运行它。首先在 on databound 事件的第一行设置断点。按 F5 开始调试。运行页面,当断点被命中时,按 F10 单步执行。
  • 别放弃我,我还在努力研究你的建议
猜你喜欢
  • 1970-01-01
  • 2012-06-30
  • 2014-04-20
  • 1970-01-01
  • 1970-01-01
  • 2019-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多