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之類的網絡監視器,則可以瞭解服務器響應的時間。在這種情況下,我非常懷疑服務器時間是個問題。

相關問題