[問題] 大量資料呈現效能

作者: SinclairShen (SinclairShen)   2014-12-10 19:51:14
使用.net C#
1、同一時間可能有1000人在線上
2、讀取的table有2000萬筆資料
3、每次查詢讀取1萬筆資料
有查詢網頁,此網頁分兩個部份,
上半部將讀到的1萬筆資料劃成趨勢圖,
下半部將這1萬筆資料以GridView分頁呈現,
每頁顯示10筆資料
請問,在以上條件下,下列那種方式可以減少使用者等待時間?
還是另有其他的方式?
方式一:
一開始從資料庫讀入一萬筆資料,
將這一萬筆資料劃成趨勢圖,
再將資料以DataTable存於ViewState,
GridView的資料來源則讀取該ViewState,
翻頁與欄位排序時也讀取該ViewState
方式二:
任何動作都從資料庫讀取,
從資料庫讀取這一萬筆資料劃成趨勢圖,
Bind GridView時再從資料庫欲顯示的10筆資料,
翻頁與欄位排序時也都是從資料庫取出欲顯示的10筆資料
謝謝
作者: vidan41 ( )   2014-12-10 20:27:00
方法二,可以用orm採skip take的方式每次抓10筆圖和表用ajax分開處理,圖只要畫一次就好
作者: SinclairShen (SinclairShen)   2014-12-10 20:34:00
請問 如果每次最多只讀500筆資料 也是方式二比較好嗎?
作者: vidan41 ( )   2014-12-10 20:38:00
viewstate本身就是微軟做webform的一個模擬有狀態的機制近年MVC那麼盛行也有部分原因是因為viewsate的肥大導致如果您寫的網站是webform架構而非MVC,我會建議能用client端ajax的技術就多使用,盡量輕量化,少用viewstate
作者: GoalBased (Artificail Intelligence)   2014-12-10 22:11:00
gridview的分頁應該不會一開始就全傳吧..?我用gv內建的分頁沒特別注意..但不會有效能問題之後你的趨勢圖適用char?你想想看每一個user 一進到這個圖表,你就要去資料庫撈一萬筆,畫成圖(jpg?),這個動作挺吃資源的
作者: SinclairShen (SinclairShen)   2014-12-11 08:49:00
方法二的話dataview不是一開始就全傳,趨勢圖是用.net chart
作者: jcpf126 (jcpf126)   2014-12-11 08:51:00
我很好奇一萬筆資料存成Viewstate後送到client會有多大然後同時有1000人在線上,會吃掉Server多少上傳頻寬呢...
作者: SinclairShen (SinclairShen)   2014-12-11 11:19:00
以方法二,1萬筆大於1MB1萬筆大約1MB
作者: vivi303030 (wengogogogo)   2014-12-23 09:27:00
好奇,1萬筆資料呈現到web需要多少時間?

Links booklink

Contact Us: admin [ a t ] ucptt.com