現在要寫一個資料編輯框,考慮到記憶體占用量比較大,win32記憶體很緊張,而且繪圖需要DIB影像作為快取二次繪圖,BYTE 長度 =高*寬*4
而且一個程式可能用戶會開很多個資料編輯框,現在想到辦法
DIB:SetDIBitsToDevice 可以指定映射檔案 當資料編輯框確定不活動 選項卡切換后 把影像給 DeleteObject
資料陣列:寫一個記憶體檔案管理類 當在資料在可視區域的時候SendMessage to 控制元件視窗 把 記憶體檔案 mapping 的指標丟給他里面的一個 定長:[陣列] 這個陣列根據字體 什么繪制引數 用 控制元件高度可以計算出來 把不在可視區域的資料直接Unmap,
問題:現在陣列可能有100個 程式會在一個檔案夾下生成100個檔案(如果使用一個檔案管理超級麻煩,每個陣列對應一種元素 資料長度未知
不好管理),而且不知道映射檔案在 10mb以下效率損失會有多少?
難道要使用資料庫?
uj5u.com熱心網友回復:
百說不如一試,mmap( )。資料庫歸根結底也是檔案,都會有磁盤io,頂多不過也有快取,還是占記憶體。
uj5u.com熱心網友回復:
你map不會直接使用記憶體,OS只是給你做標記,只有真正做資料訪問的時候才會觸發記憶體分配。一般來說是這樣的。
假設你有10M檔案,你做一次map到記憶體的操作,OS也并不會一下子把檔案全讀到記憶體里去,
只有你訪問具體位置的時候,他會選擇性的載入。所以可能你擔心的效率問題,并不是問題。
你可以做個試驗,弄個100M的檔案,map他,看下map需要多久回傳,
~~~~
另外多編輯框,一般總是只有一個編輯框是當前激活的編輯框吧,
如果你實在擔心記憶體占用問題,大不了做一個計時檢測,如果編輯框10秒內沒有處于當前激活狀態(就是用戶沒切換到該編輯框)
那么把map關閉,讓他寫回到檔案即可。
你也可以一個編輯框任務對應一個執行緒,也可以只用單執行緒,定時詢問編輯框的激活時間
uj5u.com熱心網友回復:
嗯嗯,但是我測驗過一個檔案夾下會有幾百個檔案,囧
uj5u.com熱心網友回復:
那就是總體設計的問題了,100個程式生成100個檔案?你的編輯軟體的職責范圍是什么?給用戶提供什么樣的介面?
用戶會怎么操作?
這些檔案是別的程式生成的?還是100個用戶在使用你的程式生成的?
DIB檔案是對應一個編輯框里的組成元素?還是說一整個編輯框可以用SetDIBitsToDevice去映射成一個檔案?
DIB檔案之間是否有關聯?
你需要梳理清楚
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/88722.html
標籤:C++ 語言
