C# Internet Explorer滞后于IQueryable数据源。Firefox和Chrome A-OK。视频证明提供
我想说这是一个疑问,但事实并非如此。即使我们一步一步地进行,查询也会顺利完成。即使是.DataBind()方法似乎也不会导致延迟 以下是我如何知道它与作为绑定源的IQueryable有关: 旧代码:C# Internet Explorer滞后于IQueryable数据源。Firefox和Chrome A-OK。视频证明提供,c#,internet-explorer,entity-framework,firefox,google-chrome,C#,Internet Explorer,Entity Framework,Firefox,Google Chrome,我想说这是一个疑问,但事实并非如此。即使我们一步一步地进行,查询也会顺利完成。即使是.DataBind()方法似乎也不会导致延迟 以下是我如何知道它与作为绑定源的IQueryable有关: 旧代码: 使用SqlCommand调用存储过程,并使用SqlAdapter填充新的数据表 DataTable将被发送到每个DropDownList的方法中。(共有5个DDL) 每个方法都将数据表的行(是的,每个行)馈送到IEnumerable中 将对IEnumerable运行多个LINQ查询,以筛选出我们想要
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"));
IQueryable elr=DB.Expose\u LotRuns;
如果(iTechID>0)
elr=elr.Where(x=>x.Master\u LotRuns.Flows.CD\u Techs.ID==iTechID);
如果(iFlowID>0)
elr=elr.Where(x=>x.Master\u LotRuns.Flows.ID==iFlowID);
如果(iToolID>0)
elr=elr.Where(x=>x.Master\u LotRuns.Tools.ID==iToolID);
如果(iOperationID>0)
elr=elr.Where(x=>x.Master\u LotRuns.Operations.ID==iOperationID);
如果(iReticleID>0)
elr=elr.Where(x=>x.retiles.ID==iReticleID);
var techs=从elr中的x开始
其中(x.Master_LotRuns.Flows.CD_Techs!=null)
x组由新
{
x、 Master_LotRuns.Flows.CD_Techs.ID,
x、 Master_LotRuns.Flows.CD_Techs.Technology
}进入y
orderby y.Key.Technology
选择新{y.Key.ID,y.Key.Technology};
var流量=从elr中的x开始
//其中(x.Master_LotRuns.Flows!=null)
x组由新
{
x、 Master_LotRuns.Flows.ID,
x、 Master_LotRuns.Flows.Flow
}进入y
orderby y.Key.Flow
选择新建{y.Key.ID,y.Key.Flow};
var工具=从elr中的x开始
//其中(x.Master\u LotRuns.Tools!=null)
x组由新
{
x、 Master_LotRuns.Tools.ID,
x、 Master_LotRuns.Tools.Tool
}进入y
orderby y.Key.Tool
选择新建{y.Key.ID,y.Key.Tool};
var ops=从elr中的x开始
//其中(x.Master\u LotRuns.Operations!=null)
x组由新
{
x、 Master_LotRuns.Operations.ID,
x、 Master_LotRuns.Operations.Operation
}进入y
orderby y.Key.Operation
选择新建{y.Key.ID,y.Key.Operation};
var rets=从elr中的x开始
//其中(x.十字线!=null)
由新的{x.retries.ID,x.retries.retriel}将x分组为y
orderby y.Key.REDILE
选择新{y.Key.ID,y.Key.retile};
ddlTechs.DataTextField=“技术”;
ddlTechs.DataValueField=“ID”;
ddlTechs.DataSource=techs;
ddlTechs.DataBind();
插入(0,新列表项(“任何”、“0”);
ddlFlows.DataTextField=“Flow”;
ddlFlows.DataValueField=“ID”;
ddlFlows.DataSource=流;
ddlFlows.DataBind();
插入(0,新列表项(“任何”、“0”));
ddlTools.DataTextField=“工具”;
ddlTools.DataValueField=“ID”;
ddlotools.DataSource=工具;
ddlTools.DataBind();
插入(0,新列表项(“任何”、“0”));
ddlOpers.DataTextField=“操作”;
ddlOpers.DataValueField=“ID”;
ddlOpers.DataSource=ops;
ddlOpers.DataBind();
插入(0,新列表项(“任何”、“0”);
ddlRetriels.DataTextField=“十字线”;
ddlriecles.DataValueField=“ID”;
ddlRetiles.DataSource=rets;
ddlRetries.DataBind();
插入(0,新列表项(“任何”、“0”));
现在,如果你观看下面的视频,你会看到上面的代码在Firefox和Chrome中都很好地工作,但在MS IE中却很失败。通常我会很高兴,因为我不使用IE,但IE是公司的政策。还值得一提的是,延迟只发生在第一个DDL中,而不会发生在任何后续选择中。此外,初始加载(使用相同的方法加载所有数据,完全不受限制)也不会花费这么长时间加载
请告诉我为什么IE会这样,我能做些什么来修复它。顺便说一句,它在IE7和IE8中的效果同样糟糕。首先,您在本文中的问题中包含的代码没有任何错误,因为它没有在IE中运行。它与ASP.NET
UpdatePanel
postback代码有关,IE中有时会出现问题,特别是在具有多行的下拉列表中。看
要调试这样的问题,您可以附加一个探查器(IE8有一个),并查看哪个函数需要很长时间才能执行。如果您还连接了网络监视器,如HTTPWatch或Fiddler,则可以了解服务器响应所需的时间。在这种情况下,我高度怀疑服务器时间是问题所在。另一个发布的用户是否正确,以及如何正确