2012-05-31 61 views
1

我有一個需要270秒渲染的中繼器,實際上最終會崩潰所有瀏覽器。用於檢索數據的SQL大約需要10秒。我想刪除Eval來查看是否會加快速度,但是我遇到了正確的語法問題。我懷疑這會實際上提高性能,因爲我正在處理150,000條記錄。 GridView或其他控件會更快嗎?將使用LINQ to SQL提高性能?下面是評估和演示代碼:在轉發器中不使用Eval並提高性能的正確方法?

<%#Eval("Name")%> 

我想:

<%# ((DataRowView)Container.DataItem)["Name"]%> 

但上面不起作用。它說DataRowView不能用作表達式

我還會指出沒有分頁涉及。

+0

什麼類型是您的數據源? – jrummell

+0

@jrummell - 我有一種方法將SQL拉入數據表中,然後將其綁定到中繼器。我沒有使用SqlDataSource,ObjectDatasource等。 – Xaisoft

+0

這裏的問題不是Eval,而是渲染一個表(而不是div),數據不是延遲加載,而是一起加載到內存中,以及視圖狀態你可能會用gridview。 – Aristos

回答

1

使用EvalContainer.DataItem不會有所作爲,因爲它們是相同的東西。請看看這個SO

如果您的瀏覽器在顯示數據時發生崩潰,那是因爲在瀏覽器上呈現的結果太多或產生的javascript。請注意0​​在服務器端執行,所以它不是瀏覽器崩潰的根本原因。

我建議使用分頁來提高性能並避免崩潰。如果你真的不能使用分頁,那麼讓用戶下載一個csv文件在excel甚至PDF文件中打開怎麼樣?

至於使用Linq to SQL來提高性能,我假設你將它與存儲過程或動態sql進行比較?存儲過程將始終爲您提供最佳性能,但是一旦將動態sql或linq表達式(或編譯過的linq)緩存在sql server上,它們與sproc相比就不會太慢。

+0

您提供的鏈接比較Eval(「var」)%>或<%#DataBinder.Eval(Container.DataItem,「var」)%>。一個不同的方式來做它沒有Eval是使用<%#((Object)Container.DataItem).var%>,雖然有性能測試,我個人發現沒有區別。 –