3

我想说这是查询,但事实并非如此。即使我们一步一步地完成这些查询,查询仍然顺利完成。即使.DataBind()方法也不会导致延迟。Internet Explorer滞后于IQueryable数据源。 Firefox和Chrome A-OK。提供视频证明

这里是我怎么知道它与我的IQueryable做,因为绑定源:

旧代码:使用SqlCommand的

  1. 调用存储过程和使用SqlAdapter填写一个新的DataTable。
  2. DataTable将被发送到每个DropDownList的方法中。 (有5个DDL)
  3. 每种方法都会将DataTable的行(是的,它们中的每一个)提供给IEnumerable。对于IEnumerable运行多个LINQ查询来筛选出我们想要的选项,包括.Distinct(IEqualityComparer)和.Sort(x => x [“RowName”]); (同样,每种方法都会执行此操作)。
  4. 一个新的DataTable将通过IEnumerable.CopyToDataTable被创建()(是的,再次,每个方法)
  5. 的DropDownList.DataSource将被设置为新的数据表,并然后将.DataBind()。

代码的这种可怕的嘲讽在IE中会很快完成。也许是一两分钟的思考时间。

下面是新的代码,在肉体:

IQueryable<Expose_LotRuns> elr = DB.Expose_LotRuns; 

if (iTechID > 0) 
    elr = elr.Where(x => x.Master_LotRuns.Flows.CD_Techs.ID == iTechID); 

if (iFlowID > 0) 
    elr = elr.Where(x => x.Master_LotRuns.Flows.ID == iFlowID); 

if (iToolID > 0) 
    elr = elr.Where(x => x.Master_LotRuns.Tools.ID == iToolID); 

if (iOperationID > 0) 
    elr = elr.Where(x => x.Master_LotRuns.Operations.ID == iOperationID); 

if (iReticleID > 0) 
    elr = elr.Where(x => x.Reticles.ID == iReticleID); 

var techs = from x in elr 
         where (x.Master_LotRuns.Flows.CD_Techs != null) 
         group x by new 
         { 
          x.Master_LotRuns.Flows.CD_Techs.ID, 
          x.Master_LotRuns.Flows.CD_Techs.Technology 
         } into y 
         orderby y.Key.Technology 
         select new { y.Key.ID, y.Key.Technology }; 

var flows = from x in elr 
         //where (x.Master_LotRuns.Flows != null) 
         group x by new 
         { 
          x.Master_LotRuns.Flows.ID, 
          x.Master_LotRuns.Flows.Flow 
         } into y 
         orderby y.Key.Flow 
         select new { y.Key.ID, y.Key.Flow }; 

var tools = from x in elr 
         //where (x.Master_LotRuns.Tools != null) 
         group x by new 
         { 
          x.Master_LotRuns.Tools.ID, 
          x.Master_LotRuns.Tools.Tool 
         } into y 
         orderby y.Key.Tool 
         select new { y.Key.ID, y.Key.Tool }; 

var ops = from x in elr 
        //where (x.Master_LotRuns.Operations != null) 
        group x by new 
        { 
         x.Master_LotRuns.Operations.ID, 
         x.Master_LotRuns.Operations.Operation 
        } into y 
        orderby y.Key.Operation 
        select new { y.Key.ID, y.Key.Operation }; 

var rets = from x in elr 
        //where (x.Reticles != null) 
        group x by new { x.Reticles.ID, x.Reticles.Reticle } into y 
        orderby y.Key.Reticle 
        select new { y.Key.ID, y.Key.Reticle }; 

ddlTechs.DataTextField = "Technology"; 
ddlTechs.DataValueField = "ID"; 
ddlTechs.DataSource = techs; 
ddlTechs.DataBind(); 
ddlTechs.Items.Insert(0, new ListItem("Any", "0")); 

ddlFlows.DataTextField = "Flow"; 
ddlFlows.DataValueField = "ID"; 
ddlFlows.DataSource = flows; 
ddlFlows.DataBind(); 
ddlFlows.Items.Insert(0, new ListItem("Any", "0")); 

ddlTools.DataTextField = "Tool"; 
ddlTools.DataValueField = "ID"; 
ddlTools.DataSource = tools; 
ddlTools.DataBind(); 
ddlTools.Items.Insert(0, new ListItem("Any", "0")); 

ddlOpers.DataTextField = "Operation"; 
ddlOpers.DataValueField = "ID"; 
ddlOpers.DataSource = ops; 
ddlOpers.DataBind(); 
ddlOpers.Items.Insert(0, new ListItem("Any", "0")); 

ddlReticles.DataTextField = "Reticle"; 
ddlReticles.DataValueField = "ID"; 
ddlReticles.DataSource = rets; 
ddlReticles.DataBind(); 
ddlReticles.Items.Insert(0, new ListItem("Any", "0")); 

现在,如果你看下面的视频,你会看到上面的代码工作相当不错,在Firefox和Chrome浏览器,然而它在MS IE中吹。通常我会很高兴,因为我不使用IE,但IE是公司的政策。还值得一提的是,滞后只发生在第一个DDL上,而不是后来的选择。此外,初始加载(加载所有数据,使用相同的方法并不加限制)也不需要很长时间来加载。

http://www.youtube.com/watch?v=-3QyNj87BSQ

一些请你,请告诉我为什么IE浏览器的行为就像这一点,我能做些什么来解决它。顺便说一句,它在IE7和IE8中的作用很差

回答

5

首先,在这个问题中包含的代码没有问题,因为它没有在IE中运行。它与ASP.NET UpdatePanel回发代码有关,在IE中有时会遇到问题,特别是在有许多行的下拉列表中。见this

要调试这样的问题,你可以附加一个Profiler(IE8有一个),看看哪个函数需要很长时间才能执行。如果您还连接了诸如HTTPWatch或Fiddler之类的网络监视器,则可以了解服务器响应的时间。在这种情况下,我非常怀疑服务器时间是个问题。

相关问题