面對十萬至百萬筆資料的頻繁插入、刪除、隨機存取需求,MFC 的 CArray 因底層為連續陣列,大量資料操作效率呈指數級下降。啟程動態陣列 V2.0 創新採用「鏈表分段 + 區塊陣列」混合架構,兼具陣列 O(1) 隨機索引與鏈表彈性擴展優勢,實測 10 萬筆綜合操作僅需 300ms(CArray 需 3000ms),且效能隨資料量線性增長。
資料結構示意圖(V1.0 版,V2.0 於節點新增已用空間與總閒置空間變數)
核心架構創新
- 分段儲存:資料分塊存放於雙向鏈表節點,每段固定容量(可配置)
- 智慧擴展:資料增長時自動分配新段鏈接,減少時釋放空閒段
- V2.0 關鍵改進:每節點新增「已用空間」與「總閒置空間」計數器,插入/刪除僅需處理目標段,避免全域資料搬移
- 段式跳躍索引:隨機存取透過區塊跳躍定位,配合「當前位置指標」快取,遍歷操作逼近陣列速度
- 自動空間壓縮:閒置空間超過閾值自動整理回收,亦提供強制整理介面
操作邏輯詳解
插入資料
目標段有空閒 → 區段內整理插入;無空閒 → 自動分配新段鏈接至鏈表。
刪除資料
定位目標段移除資料;若該段僅剩目標資料 → 自動刪除節點並維護鏈表完整性。
新增資料
檢查尾段空間,足夠則直接寫入,否則配置新段。
效能基準測試
測試工具包含正確性驗證與效能比較模組。10 萬筆綜合操作(增刪改查混合):
- 啟程動態陣列:~300 ms
- MFC CArray:~3000 ms
- 隨資料量增長,優勢差距進一步擴大(線性 vs 指數複雜度)
測試工具介面:效能比較與正確性驗證
參數調校指南
- 區塊大小:10 萬筆資料建議設 100;視記憶體與資料量調整
- 壓縮閾值:頻繁插刪操作適當調大,否則調小以節省記憶體
版本歷程與授權
- V2.0 (2004-06-03):強化插入刪除效能
- V1.0 (2003-09-25):初始版本
- 開放授權:可自由使用、修改、傳播;作者不承擔使用後果責任
原始碼下載
完整原始碼與測試專案已附於配套資源。