線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3780
推到 Plurk!
推到 Facebook!

ClientDataSet超過二萬筆PacketRecords為-1時等非常久?

答題得分者是:jieshu
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-02-05 14:53:11 IP:210.61.xxx.xxx 未訂閱
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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-02-05 15:30:48 IP:61.226.xxx.xxx 未訂閱
你參考Delphi範例Midas-->Pooler,將DataSetProvider改成無物件狀態試試看,我想應該會改善
jieshu
版主


發表:42
回覆:894
積分:745
註冊:2002-04-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-02-05 16:06:00 IP:203.204.xxx.xxx 未訂閱
引言:
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
資料多速度慢應屬正常,可改用SocketConnection加上InterceptGUID的資料壓縮功能試試,看可否提昇速度。如果沒有抓出全部資料,DBGrid移到尾筆時需要抓取資料,當然需要時間等候。 建議教育使用者不要叫出全部,那麼多資料怎麼瀏覽,且速度一定是慢的,查資料可依需要輸入相關值,查出相關資料,速度快瀏覽又方便。
人生有夢,逐夢而行。 人若為善,福雖未至,禍已遠離。 人若為惡,禍雖未至,福已遠離。 http://www.taconet.com.tw/jieshu/
------
人生有夢,逐夢而行
人若為善,福雖未至,禍已遠離
人若為惡,禍雖未至,福已遠離
http://www.taconet.com.tw/jieshu/
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-02-05 16:31:00 IP:210.61.xxx.xxx 未訂閱
謝謝jieshu和johnny2212兩位前輩的指導 我改了pooler範例, 狀況依然如此 在兩層上, Query直接向SQL server撈資料, DBGrid一下子就出來 而在三層, 不知道問題是出在Provider還是ClientDataSet 就是這樣子慢 也許就像jieshu所說, 限制縮小範圍可以解決 但是我想看有無其它辦法 了解究竟為什麼會這樣? 三層真的不能一次撈巨量的資料麼?(可能真的是我異想天開)
jieshu
版主


發表:42
回覆:894
積分:745
註冊:2002-04-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-02-05 17:17:29 IP:203.204.xxx.xxx 未訂閱
引言: 謝謝jieshu和johnny2212兩位前輩的指導 我改了pooler範例, 狀況依然如此 在兩層上, Query直接向SQL server撈資料, DBGrid一下子就出來 而在三層, 不知道問題是出在Provider還是ClientDataSet 就是這樣子慢 也許就像jieshu所說, 限制縮小範圍可以解決 但是我想看有無其它辦法 了解究竟為什麼會這樣? 三層真的不能一次撈巨量的資料麼?(可能真的是我異想天開)
你的Query是指用BDE還是ADO,BDE好像會幫你cache,所以DBGrid一下子就出來了,但移到最後一筆應該還是一樣要等一下子,會出現一個SQL的漏斗。
人生有夢,逐夢而行。 人若為善,福雖未至,禍已遠離。 人若為惡,禍雖未至,福已遠離。 http://www.taconet.com.tw/jieshu/
------
人生有夢,逐夢而行
人若為善,福雖未至,禍已遠離
人若為惡,禍雖未至,福已遠離
http://www.taconet.com.tw/jieshu/
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-02-05 17:33:50 IP:210.61.xxx.xxx 未訂閱
ADO
jieshu
版主


發表:42
回覆:894
積分:745
註冊:2002-04-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-02-05 18:49:21 IP:203.204.xxx.xxx 未訂閱
引言: ADO
ADO我就不熟了,可能也有類似功能吧!
人生有夢,逐夢而行。 人若為善,福雖未至,禍已遠離。 人若為惡,禍雖未至,福已遠離。 http://www.taconet.com.tw/jieshu/
------
人生有夢,逐夢而行
人若為善,福雖未至,禍已遠離
人若為惡,禍雖未至,福已遠離
http://www.taconet.com.tw/jieshu/
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-02-06 08:35:09 IP:210.61.xxx.xxx 未訂閱
jieshu前輩謝謝您 不知道還有沒有其它前輩可以指點一二?
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-02-09 14:07:10 IP:210.61.xxx.xxx 未訂閱
看來3-tier ClientDataSet確實不能一次撈過多資料量 這是它的限制
johnny2212
初階會員


發表:34
回覆:65
積分:39
註冊:2003-04-09

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-02-10 05:59:41 IP:61.226.xxx.xxx 未訂閱
對不起,上次我看錯了問題,我以為你是指很多人在使用而導致速度變慢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

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-02-10 08:41:43 IP:210.61.xxx.xxx 未訂閱
johnny2212兄, 您說的情況我在問問題之前已經實驗過了, 我用ado當作存取db,後端一資料庫約11萬筆,在二層架構, 實際上約三秒就撈出資料, 而在三層式是約五分鐘, 已超出一般人可忍受的範圍, 於是才po問題出來. 我猜想, 三層應儘量撈小一點資料, 因為Provider及ClientDataSet很耗處理資料吧?
jieshu
版主


發表:42
回覆:894
積分:745
註冊:2002-04-15

發送簡訊給我
#12 引用回覆 回覆 發表時間:2004-02-10 09:14:14 IP:203.204.xxx.xxx 未訂閱
引言: johnny2212兄, 您說的情況我在問問題之前已經實驗過了, 我用ado當作存取db,後端一資料庫約11萬筆,在二層架構, 實際上約三秒就撈出資料, 而在三層式是約五分鐘, 已超出一般人可忍受的範圍, 於是才po問題出來. 我猜想, 三層應儘量撈小一點資料, 因為Provider及ClientDataSet很耗處理資料吧?
當然,三層經過層層的加工,速度一定比二層慢,但這是用在區網且User數不多的情形下,如果像另一討論說User有500人,那DB主機的負荷可想而知,如果改用三層的話就可分散負荷,所以並不是所有系統用三層都是最佳的效能。
人生有夢,逐夢而行。 人若為善,福雖未至,禍已遠離。 人若為惡,禍雖未至,福已遠離。 http://www.coss.com.tw/jieshu/
------
人生有夢,逐夢而行
人若為善,福雖未至,禍已遠離
人若為惡,禍雖未至,福已遠離
http://www.taconet.com.tw/jieshu/
系統時間:2024-06-25 13:37:11
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!