我在test.aspx页面上动态创建一个复选框表。表的维度(行数和列数)通过查询数据库来确定。
在test.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中的Net选项卡确定不同事件所花费的时间,发现GetTest.aspx花了将近4分钟,等待的时间太长了。
有没有办法缩短页面加载时间?我创建动态复选框的方法是否正确?
提前致谢。
欢呼声
答案 0 :(得分:3)
我正在看这条评论:
// Query the database to get the data for rows and columns
你可以掩饰这一点,但是当网页加载速度缓慢时,它会在10次中出现9次,因为它正在执行一些缓慢的数据库操作。
我的猜测是(a)您的数据库查询效率非常低,可能是由于缺少索引,或者(b)您在某个循环内部运行数据库查询(非常糟糕)。
ASP.NET可以在不到1秒的时间内创建数千个复选框。它只是类实例化。问题出在其他地方。
答案 1 :(得分:1)
在页面上启用ASP.NET跟踪并查看所有时间花在哪里。对于任何页面来说,四分钟当然太长了。你列出两个虽然... test.aspx和GetTest.aspx ...什么是GetTest.aspx?
编辑:
好的,你不是在这里告诉我们整个故事。这个页面还有什么作用?这些控制在哪里?我只是在测试页面上使用类似于上面的代码尝试了这个,并且它在瞬间呈现。
就像我说的那样......启用TRACE并找出真正占用的东西!使用该工具,这就是它的原因。
答案 2 :(得分:0)
创建控件(CheckBox)并从服务器端添加到持有者非常便宜。考虑到您没有创建数十亿。
生成的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"
答案 3 :(得分:0)
尝试禁用Firebug&amp;看看它是否还需要那么久。还要仔细检查您的代码是否生成了比预期更多的复选框。