全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1989
推到 Plurk!
推到 Facebook!

COM+/DCOM/COM 如何紀錄參數?

答題得分者是:speedup
seaturn99
版主


發表:69
回覆:427
積分:214
註冊:2003-08-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-05-23 19:13:07 IP:211.76.xxx.xxx 未訂閱
請問一下各位先進 : 如果寫了一個 COM /DCOM/COM 元件通常設計上是如何紀錄參數?是使用 ini 檔(要置於哪個目錄)??還是使用 Registry (該寫在哪些位置)?? 我想紀錄如 ConnectionString 或是一些初始化物件參數,可以透過程式修改參數後 reload 動態改變.. 另外,請教一下,在 COM 架構中 (TMtsAutoObject),如何設計 Object pooling 裡 Share 同一個 ADOConnection ,目前我是利用一個 DataModule,動態 Create/Destory ,利用 DataModule 的一些實作 procedure 取得或操作 COM Interface 資料, 造成幾個 Client 呼叫 COM 介面就喚起幾個 Connection.. ---- 我只會兩件事,這也不會,那也不會 眼見不一定為真 ----
speedup
資深會員


發表:19
回覆:259
積分:280
註冊:2003-07-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-05-24 09:51:03 IP:61.224.xxx.xxx 未訂閱
引言: 如果寫了一個 COM /DCOM/COM 元件通常設計上是如何紀錄參數?是使用 ini 檔(要置於哪個目錄)??還是使用 Registry (該寫在哪些位置)??
你可以將資訊記錄在Client或DataBase 或Ap Server中,要用何種方式存看你的習慣即可,但這些資料參數可視為一種狀態,因此若是AP Serve要做成無狀態形式,AP Server上最好不要存
引言: 我想紀錄如 ConnectionString 或是一些初始化物件參數,可以透過程式修改參數後 reload 動態改變..
如果你寫的程式是無狀態的,那麼你這樣做請小心考慮可能的狀況,在多人同時使用的狀態下,可能造成同時使用該物件的Client非預期結果(eg一般User正在寫入資料,MIS確把AP Server上的COM 連接資料庫的方式換了);另外一點,若你的系統若要支援負載平衡同樣也會有問題產生,最好還是把參數記錄在Client或Server之中;由COM 每次執行時由方法的參數傳入或由Database捉取,(當然若是寫在AP Server中,變更時你必須確認同時只能有1人在使用,這種狀況通常只會出現在安裝或系統維護期間)
引言: 另外,請教一下,在 COM 架構中 (TMtsAutoObject),如何設計 Object pooling 裡 Share 同一個 ADOConnection ,目前我是利用一個 DataModule,動態 Create/Destory ,利用 DataModule 的一些實作 procedure 取得或操作 COM Interface 資料, 造成幾個 Client 呼叫 COM 介面就喚起幾個 Connection..
如果你要做的只是Database Pooling你只要把ADOConnection的KeepConnection設成False即可 若要做到Object pooling ,Sorry MTSDataModule基本上只保證在Apartment Threading Model下執行正確,你可以把Threading Model改成Both基本上就可在在元件管理中設定Object pooling,但是跑出奇怪結果的話 真的要做的話你可以選
------
唉~
seaturn99
版主


發表:69
回覆:427
積分:214
註冊:2003-08-25

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-05-24 12:15:29 IP:203.66.xxx.xxx 未訂閱
speedup Sir 您好 :    
引言: 你可以將資訊記錄在Client或DataBase 或Ap Server中,要用何種方式存看你的習慣即可,但這些資料參數可視為一種狀態,因此若是AP Serve要做成無狀態形式,AP Server上最好不要存
我只是要紀錄一般初始化的資料每個 Clent 都一樣,並不需要紀錄 Client 狀態的資料,應該算是 Stateless 的吧,這樣利用 ini File 儲存應該不會有什麼大問題(除了底下討論的問題外),因為 ini 會有存放路徑的問題,所以才會想到用 Registy,結果看起來會衍生更多問題??
引言: 如果你寫的程式是無狀態的,那麼你這樣做請小心考慮可能的狀況,在多人同時使用的狀態下,可能造成同時使用該物件的Client非預期結果(eg一般User正在寫入資料,MIS確把AP Server上的COM 連接資料庫的方式換了);另外一點,若你的系統若要支援負載平衡同樣也會有問題產生,最好還是把參數記錄在Client或Server之中;由COM 每次執行時由方法的參數傳入或由Database捉取,(當然若是寫在AP Server中,變更時你必須確認同時只能有1人在使用,這種狀況通常只會出現在安裝或系統維護期間)
我已經想通瞭解了,的確儲存於 Cleint 端或 DB 是個比較好的選擇,感謝您的指導 ..
引言: 如果你要做的只是Database Pooling你只要把ADOConnection的KeepConnection設成False即可 若要做到Object pooling ,Sorry MTSDataModule基本上只保證在Apartment Threading Model下執行正確,你可以把Threading Model改成Both基本上就可在在元件管理中設定Object pooling,但是跑出奇怪結果的話 真的要做的話你可以選>< face="Verdana, Arial, Helvetica"> 剛試驗過了,KeepConnection 設成 False 果然可以做到 Connection Pooling,我目前是跑 COM Object Pooling , Threading Model 選 Both.. 我目前的想法是,將每個 COM Object 的 Method 的執行當作 Thread,我在 interface 內寫了一個 Method ,傳入我要 insert 的資料 (上萬筆資料).. 我的想法是,傳入的資料應為 Local Storage,故無同步的問題,所以就讓競速自然發生 (但此 Method 內有做 Transaction),不知道這樣做會不會有問題.. ---- 我只會兩件事,這也不會,那也不會 眼見不一定為真 ----
speedup
資深會員


發表:19
回覆:259
積分:280
註冊:2003-07-04

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-05-24 12:52:04 IP:61.224.xxx.xxx 未訂閱
引言: 剛試驗過了,KeepConnection 設成 False 果然可以做到 Connection Pooling,我目前是跑 COM Object Pooling , Threading Model 選 Both.. 我目前的想法是,將每個 COM Object 的 Method 的執行當作 Thread,我在 interface 內寫了一個 Method ,傳入我要 insert 的資料 (上萬筆資料).. 我的想法是,傳入的資料應為 Local Storage,故無同步的問題,所以就讓競速自然發生 (但此 Method 內有做 Transaction),不知道這樣做會不會有問題..
不是很清楚你的問題所在,但是你如果設計的COM 是從TMTSDataModule繼承下來哪麼最好只用(Apartment Threading Model),這在Delphi的Help曾提過(我忘了在哪看過)如果要快點,可在程式碼稍微動手腳改成 Natural Threadinf Model 不過同樣無法設成Object Pooling ,不過Object Pooling似乎不是那麼的重要,因為若想提昇效能,應著重在改進DataSnap的傳遞資料上,另外就是COM 的啟動效率上(MTSDataModule上不要放太多Query/Table,且不要設Active,最好由每個interface上的方法自行Create所需的Table,如此可大大減輕呼叫每個方法時重新啟動元件的時間) 混心雜欲 棄修身~唉
------
唉~
seaturn99
版主


發表:69
回覆:427
積分:214
註冊:2003-08-25

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-05-24 13:20:55 IP:203.66.xxx.xxx 未訂閱
引言: 不是很清楚你的問題所在,但是你如果設計的COM 是從TMTSDataModule繼承下來哪麼最好只用(Apartment Threading Model),這在Delphi的Help曾提過(我忘了在哪看過)如果要快點,可在程式碼稍微動手腳改成 Natural Threadinf Model 不過同樣無法設成Object Pooling ,不過Object Pooling似乎不是那麼的重要,因為若想提昇效能,應著重在改進DataSnap的傳遞資料上,另外就是COM 的啟動效率上(MTSDataModule上不要放太多Query/Table,且不要設Active,最好由每個interface上的方法自行Create所需的Table,如此可大大減輕呼叫每個方法時重新啟動元件的時間)
我是繼承 TMtsAutoObject ,只負責 Insert 大量資料進資料庫(將資料以變數 [in] 的方式一次傳入 COM 物件,非一次傳入一筆資料,以避免網路 Round-Trip),所以才會想利用 Object Pooling 提升效率 (實驗的結果是有提升,效率),不過由於我不是很了解 Thread Mode 設成 both 的狀況,所以不確定不做同步資料是否能夠保持正確?? 我粗淺的想法如同上一篇所述,所以我認為就讓 Thread 彼此競速也不影響結果,只是不知道是否會發生不預期的狀況?? ---- 我只會兩件事,這也不會,那也不會 眼見不一定為真 ----
speedup
資深會員


發表:19
回覆:259
積分:280
註冊:2003-07-04

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-05-24 14:41:52 IP:61.224.xxx.xxx 未訂閱
引言: 我是繼承 TMtsAutoObject ,只負責 Insert 大量資料進資料庫(將資料以變數 [in] 的方式一次傳入 COM 物件,非一次傳入一筆資料,以避免網路 Round-Trip),所以才會想利用 Object Pooling 提升效率 (實驗的結果是有提升,效率),不過由於我不是很了解 Thread Mode 設成 both 的狀況,所以不確定不做同步資料是否能夠保持正確??
用TMtsAutoObject的確可以寫Both Threading Model,不過我也無法給你任何幫助,因為畢竟寫Free Threading是最快但寫法上也是限制最多的,存取變數要非常小心,而且我也不確定ADO系列元件可以在寫Free Threading Model下正確運作 目前能夠給你的建議是先在Apartment模式下將COM 開發完成,測試無誤後在改成Both形式(只要改Source Code一行即可)測試 期待您的實驗成果 混心雜欲 棄修身~唉
------
唉~
系統時間:2024-05-03 6:22:45
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!