ClientDataSet超過二萬筆PacketRecords為-1時等非常久? |
答題得分者是:jieshu
|
pedro
尊榮會員 發表:152 回覆:1187 積分:892 註冊:2002-06-12 發送簡訊給我 |
RemoteServer->ADOConnection,ADODataSet,DataSetProvider SQL:Select CusNo,OldCsNo from CusMain Client->DComConnection,ClientDataSet,DataSource,DBGrid當我ClientDataSet的PacketRecords為100時 運作正常, 可是當DBGrid的ScrollBar拉至最後一筆, 就停粉久 當ClientDataSet的PacketRecords為-1時 ClientDataSet.Open 需等非常久 請問前輩, 我要怎麼改善Client瀏覽整個Table的效能? 怎麼改善DBGrid從首筆移至尾筆的速度? 請前輩指導, 謝謝您 發表人 - pedro 於 2004/02/05 14:54:47 | ||
johnny2212
初階會員 發表:34 回覆:65 積分:39 註冊:2003-04-09 發送簡訊給我 |
|||
jieshu
版主 發表:42 回覆:894 積分:745 註冊:2002-04-15 發送簡訊給我 |
引言:資料多速度慢應屬正常,可改用SocketConnection加上InterceptGUID的資料壓縮功能試試,看可否提昇速度。如果沒有抓出全部資料,DBGrid移到尾筆時需要抓取資料,當然需要時間等候。 建議教育使用者不要叫出全部,那麼多資料怎麼瀏覽,且速度一定是慢的,查資料可依需要輸入相關值,查出相關資料,速度快瀏覽又方便。RemoteServer->ADOConnection,ADODataSet,DataSetProvider SQL:Select CusNo,OldCsNo from CusMain Client->DComConnection,ClientDataSet,DataSource,DBGrid當我ClientDataSet的PacketRecords為100時 運作正常, 可是當DBGrid的ScrollBar拉至最後一筆, 就停粉久 當ClientDataSet的PacketRecords為-1時 ClientDataSet.Open 需等非常久 請問前輩, 我要怎麼改善Client瀏覽整個Table的效能? 怎麼改善DBGrid從首筆移至尾筆的速度? 請前輩指導, 謝謝您 發表人 - pedro 於 2004/02/05 14:54:47
------
人生有夢,逐夢而行 人若為善,福雖未至,禍已遠離 人若為惡,禍雖未至,福已遠離 http://www.taconet.com.tw/jieshu/ |
||
pedro
尊榮會員 發表:152 回覆:1187 積分:892 註冊:2002-06-12 發送簡訊給我 |
|||
jieshu
版主 發表:42 回覆:894 積分:745 註冊:2002-04-15 發送簡訊給我 |
引言: 謝謝jieshu和johnny2212兩位前輩的指導 我改了pooler範例, 狀況依然如此 在兩層上, Query直接向SQL server撈資料, DBGrid一下子就出來 而在三層, 不知道問題是出在Provider還是ClientDataSet 就是這樣子慢 也許就像jieshu所說, 限制縮小範圍可以解決 但是我想看有無其它辦法 了解究竟為什麼會這樣? 三層真的不能一次撈巨量的資料麼?(可能真的是我異想天開)你的Query是指用BDE還是ADO,BDE好像會幫你cache,所以DBGrid一下子就出來了,但移到最後一筆應該還是一樣要等一下子,會出現一個SQL的漏斗。
------
人生有夢,逐夢而行 人若為善,福雖未至,禍已遠離 人若為惡,禍雖未至,福已遠離 http://www.taconet.com.tw/jieshu/ |
||
pedro
尊榮會員 發表:152 回覆:1187 積分:892 註冊:2002-06-12 發送簡訊給我 |
|||
jieshu
版主 發表:42 回覆:894 積分:745 註冊:2002-04-15 發送簡訊給我 |
|||
pedro
尊榮會員 發表:152 回覆:1187 積分:892 註冊:2002-06-12 發送簡訊給我 |
|||
pedro
尊榮會員 發表:152 回覆:1187 積分:892 註冊:2002-06-12 發送簡訊給我 |
|||
johnny2212
初階會員 發表:34 回覆:65 積分:39 註冊:2003-04-09 發送簡訊給我 |
對不起,上次我看錯了問題,我以為你是指很多人在使用而導致速度變慢o
在我回答你的問題前,你不妨先做一個測試,你把ADOQuery,DataSetProvider,ClientDataSet放在一起(同一個Form),再連上20000筆資料的Table,你會發覺速度還是一樣很慢,用BDE就不會了,可見得這不是多層次的問題(你不要亂猜,要確實去測試才好),而問題在於ADO,解決方法就是
CursorLocation clUseServer
CursorType ctOpenForwardOnly(單向Cursor同DBExpress,亦可用Static,但較慢,不過要做成無物件狀態,不可用單向Cursor)
至於CashSize 你就設定一個筆數,如5000,如此就解決問題了(影響不大)
|
||
pedro
尊榮會員 發表:152 回覆:1187 積分:892 註冊:2002-06-12 發送簡訊給我 |
|||
jieshu
版主 發表:42 回覆:894 積分:745 註冊:2002-04-15 發送簡訊給我 |
引言: johnny2212兄, 您說的情況我在問問題之前已經實驗過了, 我用ado當作存取db,後端一資料庫約11萬筆,在二層架構, 實際上約三秒就撈出資料, 而在三層式是約五分鐘, 已超出一般人可忍受的範圍, 於是才po問題出來. 我猜想, 三層應儘量撈小一點資料, 因為Provider及ClientDataSet很耗處理資料吧?當然,三層經過層層的加工,速度一定比二層慢,但這是用在區網且User數不多的情形下,如果像另一討論說User有500人,那DB主機的負荷可想而知,如果改用三層的話就可分散負荷,所以並不是所有系統用三層都是最佳的效能。
------
人生有夢,逐夢而行 人若為善,福雖未至,禍已遠離 人若為惡,禍雖未至,福已遠離 http://www.taconet.com.tw/jieshu/ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |