慢速运行的网页

时间:2011-07-13 16:49:52

标签: asp.net

我创建了带有下拉列表和两个gridview的网页,并且在selectedindex已更改的事件中我填充了这两个gridview,但在运行时,两个gridview需要很长时间才能填充。

注意:这个gridview之一我通过代码创建了它的数据源。 这是我的代码片段:

    protected void _ddlPLCs_SelectedIndexChanged(object sender, EventArgs e)
{
    DataTable dtStatus = new DataTable();

    dtStatus = DBLayer.getMachineNameIPStatusPlCByName(_ddlPLCs.SelectedValue);
    dtStatus.Columns.Add("Status", typeof(String));
    foreach (DataRow row in dtStatus.Rows)
    {
        if (LogicLayer.checkmachineStatus(row["machineIP"].ToString()))
            row["Status"] = "Online";
        else
            row["Status"] = "offline";

    }

    GVStatus.DataSource = dtStatus;
    GVStatus.DataBind();
    if (_ddlPLCs.SelectedValue.Contains('-'))
    {
        _dsPLCs.SelectParameters.Clear();
        _dsPLCs.SelectParameters.Add("PLCID","0");
        _dsPLCs.DataBind();
    }
    else
    {
        _dsPLCs.SelectParameters.Clear();
        _dsPLCs.SelectParameters.Add("PLCID", DBLayer.getPlCIDByName(_ddlPLCs.SelectedValue).ToString());
        _dsPLCs.DataBind();
    }            


}
请求帮助我

3 个答案:

答案 0 :(得分:4)

查看代码,我认为问题出在这个方法中:

  

LogicLayer.checkmachineStatus()

我有一种预感,这实际上是向远程机器/设备发出网络请求以确定其状态。这将会很慢,特别是如果您的计算机可能不在线并且您必须等待它们超时。

如果这是罪魁祸首,那么您要做的就是构建一个在您的服务器上运行的服务。该服务应该在后台持续进行这些检查,并使用结果更新数据库表。您可能希望在表中包含最后一次检查的时间戳。它甚至可能值得插入而不是更新,因此您可以获得状态何时处于不同值的历史记录。然后,您的ASP.Net代码应该只显示数据库表。

答案 1 :(得分:1)

资料!获取RedGate ANTS的试用版并根据您的代码运行它。

如果您选择行level timings,它会在代码中的每一行旁边放一个数字,它会准确地告诉您每行所用的时间长度为%或毫秒。确保使用挂钟时间而不是cpu时间或数据源的等待时间将无法正常计算。

我敢打赌你的数据源很慢。

答案 2 :(得分:0)

你在这里做了很多工作......

一些随意的想法

网络可能很慢 - @Joel在那个网站上有一个很好的观点。

要检查的一件事就是回发 - 确保您只对所选索引的数据绑定进行了更改。

为什么不在函数中使用'handle'caluse?可能不是问题,只是好奇。

如果您将“状态”列标题更改为“在线”,然后使用复选框(checked = online,unchecked = off-line或类似内容,您只需更新每行的bool值,而不是字符串值。

关于如何重新绑定下拉列表,看起来很奇怪。因为......您正在使用所选值作为gridview中的参数。然后,您随后重新绑定下拉列表,这可能会导致不同的选定值。哪个可能导致您的gridview再次在电路中进行数据绑定。不确定,因为我看不到你的所有代码。

无论如何,FWIW。祝你好运。