代码之家  ›  专栏  ›  技术社区  ›  Arnkrishn

ASP.NET页面包含动态元素,加载需要时间

  •  1
  • Arnkrishn  · 技术社区  · 15 年前

    我在我的电脑上动态创建一个复选框表测试.aspx第页。表的维度(行和列计数)是通过查询数据库来确定的。

    在测试.aspx佩奇,我做了以下工作:

    <script language="C#" runat="server">
    
    protected void Page_Load ( object src, EventArgs e ) {
       //Query the database to get the data for rows and columns
    
       CheckBox[] chkBox = new CheckBox[rows * columns]; //creates a collection of checkboxes
    
       //Iterate over the query set in a double for loop to create dynamic checkboxes
    }
    
    </script>
    

    现在我的行数为20,列数为10,但它可以增加(列数更可能增加)。

    我使用Firebug中的nettab来确定不同事件所花费的时间,发现获取测试.aspx大约需要4分钟,这太长了。

    干杯

    4 回复  |  直到 15 年前
        1
  •  3
  •   Aaronaught    15 年前

    我在看这个评论:

    // Query the database to get the data for rows and columns
    

    你可以忽略这一点,但是当网页加载缓慢时,10次中有9次是因为它执行了一些缓慢的数据库操作。

    我的猜测是,要么(a)您的数据库查询效率非常低,可能是由于缺少索引,要么(b)您在某个地方的循环中运行数据库查询(非常糟糕)。

    ASP.NET可以在不到1秒的时间内创建数千个复选框。这只是类实例化。问题在别处。

        2
  •  1
  •   Bryan    15 年前

    编辑:
    好吧,你不是在告诉我们整个故事。这个页面还在做什么?这些控件要去哪里?我只是在一个测试页面上使用类似于上面的代码尝试了这个,它在一瞬间呈现出来。

    就像我说的。。。启用跟踪并找出真正占用所有时间的内容!使用工具,这就是为什么它在那里。

        3
  •  0
  •   Abdul Munim    15 年前

    创建控件(CheckBox)并从服务器端添加到holder非常便宜。考虑到你不是在创造

    生成的HTML不应大到在本地计算机上花费4分钟。

    请检查生成的HTML大小以验证其质量。

    如果我是你,那么我会在我的服务器上编写以下代码。请考虑一下。

    protected void Page_Load(object src, EventArgs e) {
        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < columns; j++) {
                holderPanel.Controls.Add(
                        new CheckBox { 
                                ID = string.Format("chk{0}{1}", i, j), 
                                Text = "some text"
                });
            }
        }
    }
    

    考虑一下 holderPanel 是服务器端 asp:Panel Div 具有 ID = "holderPanel" runat="server"

        4
  •  0
  •   sagescrub    15 年前