如何加速宣告自訂類別物件?
我有一組自訂類別
cLayer (圖層)
cPolygon or cPolyline (多邊形或多重折線)
cPoint (點)
其中 cPoint
Public x as Double
... y ...
... z ...
cLayer, cPolygon 及 cPolyline均用集合物件
當 cPolyline 數量少還沒感覺, 若 cPolyline 到達 30 條以上, 在起始宣告有明顯的延遲...
例如在 Pentium II 300 跑 65 條 cPolyline (每條約有 10 ~ 100 個點)
在讀取時約需 20 sec , 我檢查過了, 檔案處理約佔 6 sec, 但是記憶體配置約佔 14 sec, 在螢幕上重繪約需 0.5 sec, 也就是說, 在起始類別宣告的行為中,
工作項目 所需時間 (s)
-----------------------------
迴圈 1 (0.5 x 2)
讀檔 5.5
類別記憶體配置 13.5
螢幕繪圖 0.5
-----------------------------
由上簡表可知, 物件記憶體配置拖太多時間, 關於類別記憶體配置是否能再加速呢?
註:
1.若將 cPoint 類別改成型態, 可以陣列型式宣告 cPoint 當然可加速, 我是指純就類別物件的記憶體配置是否可加速!
2.VB類別精靈在 Add動作為宣告一新物件, 再加入新物件; 我已經改成跳過新物件宣告的動作, 直接 Set物件的 Handle , 但是慢就是慢在初始記憶體配置, 這樣加速有限!
我有一組自訂類別
cLayer (圖層)
cPolygon or cPolyline (多邊形或多重折線)
cPoint (點)
其中 cPoint
Public x as Double
... y ...
... z ...
cLayer, cPolygon 及 cPolyline均用集合物件
當 cPolyline 數量少還沒感覺, 若 cPolyline 到達 30 條以上, 在起始宣告有明顯的延遲...
例如在 Pentium II 300 跑 65 條 cPolyline (每條約有 10 ~ 100 個點)
在讀取時約需 20 sec , 我檢查過了, 檔案處理約佔 6 sec, 但是記憶體配置約佔 14 sec, 在螢幕上重繪約需 0.5 sec, 也就是說, 在起始類別宣告的行為中,
工作項目 所需時間 (s)
-----------------------------
迴圈 1 (0.5 x 2)
讀檔 5.5
類別記憶體配置 13.5
螢幕繪圖 0.5
-----------------------------
由上簡表可知, 物件記憶體配置拖太多時間, 關於類別記憶體配置是否能再加速呢?
註:
1.若將 cPoint 類別改成型態, 可以陣列型式宣告 cPoint 當然可加速, 我是指純就類別物件的記憶體配置是否可加速!
2.VB類別精靈在 Add動作為宣告一新物件, 再加入新物件; 我已經改成跳過新物件宣告的動作, 直接 Set物件的 Handle , 但是慢就是慢在初始記憶體配置, 這樣加速有限!
文章標籤
全站熱搜

基本上我認為不太可能花這麼多時間,你是怎麼處理記憶體的呢? 65條線,每條線 100 個點,總共 6500 個點,你該不會每個點都是一個物件吧! 如果是的話,那樣不慢也難。 物件導向本身在記憶體及各種前置處理均比傳統程式設計使用更多的資源,所以能少用就少用。更精確一點來說,應該要用得恰到好處,這樣才能在執行效率及程式維護間取得最佳的平衡點。
發言者: 小吳 ---------------------- 基本上我認為不太可能花這麼多時間,你是怎麼處理記憶體的呢? 65條線,每條線 100 個點,總共 6500 個點,你該不會每個點都是一個物件吧! 如果是的話,那樣不慢也難。 物件導向本身在記憶體及各種前置處理均比傳統程式設計使用更多的資源,所以能少用就少用。更精確一點來說,應該要用得恰到好處,這樣才能在執行效率及程式維護間取得最佳的平衡點。 ---------------------- 沒錯... 當初想說, 點, 線, 面, 所以基本物件就是點... 由點組成多邊形或是多重折線等... 但是避免物件屬性一般存取造成效率的延遲, x, y, z 均宣告為 Public as Double ------- ex. cPoint.cls Public x as Double Public y as Double Public z as Double ------- 基本物件就這樣... 但是據我所知, VB 在物件記憶體配置是分兩個部分, 1.配置一個 Variant 指向物件 (單一物件用近程記憶體, 陣列物件用遠程記憶體), 物件部分用遠程記憶體 2.在 Windows 遠程記憶體中找一塊連續 64 k (一節區) 的配置給物件一般變數 (非陣列或不定長度字串) , 若物件一般變數區可小於 64 k, 重塑大小至最適大小 所以我猜是 2 在慢... 若用型態宣告 Public Type cPoint x as Double y as Double z as Double End Type 另據我所知, VB 在型態記憶體配置是分兩個部分, 1.配置一個 Variant 指向型態 (單一型態用近程記憶體, 陣列型態用遠程記憶體) 2.在 Windows 遠程記憶體中找一塊連續的配置最適大小 用型態的會比較快 ... 問題就在於形態跟物件的 Code 差太多了, 物件比較有彈性, 但在已發展完成的 Code 均以物件處理, 所以才需要找尋物件在配置起始記憶體中加速的方法!
如何去判斷傳入的參數 是多少個呢? ex: Public Function EnDecode(ByVal Pamam1, Optional ByVal Pamam2,_ Optional ByVal Pamam3, Optional ByVal Pamam4)