我有一個內存映射文件,並在當前提交的視圖中的頁面。我想解除它。 MapViewOfFile告訴我我無法在文件映射頁面上使用VirtualFree。有其他方法可以做到嗎?如何取消文件映射頁面?
1
A
回答
1
你不能decommit,但你真正想要的是不是decommitting它...
你真正想要的是從內存中釋放出來的頁面。這可以通過使用VirtualUnlock來完成。請參閱VirtualUnlock Remarks:
在未鎖定的內存範圍內調用VirtualUnlock將從進程的工作集中釋放頁面。
注意:如文檔所述,函數將返回FALSE(頁面未鎖定),並且GetLastError將返回ERROR_NOT_LOCKED。
備註:我認爲你可以通過這種方式查看它:取消映射的頁面是荒謬的 - 只要它被物理存儲支持,無論是內存還是文件,頁面都會被提交。文件映射頁面在這個意義上不能被解除,因爲它總是會被文件支持。
然而,在the question mentioned代碼測量內存佔用量,但究竟是措施不具代表性,因爲實際上的頁面從進程工作集中刪除並不一定意味着它不再出現在一個記憶。
我已經執行了一個不同的實驗,測量從存儲器映射頁面讀取一個字節需要多長時間。解鎖頁面或取消映射視圖並關閉映射句柄後,訪問速度仍然很快。
對於訪問速度較慢(即真的從內存中丟棄頁面),有必要取消映射視圖並關閉內存映射句柄和文件句柄(最後一個令我感到意外,因爲我期望取消映射查看和關閉映射句柄就足夠了)。
仍然有可能系統將VirtualUnlocked作爲一個提示,並且一旦它需要放棄某些內容,它就會立即丟棄這些頁面,但這是我必須考慮的事情,但如何證明。
相關問題
- 1. 取消映射Vim插件映射
- 2. 部分取消映射Win32內存映射文件
- 3. Linux內核如何交換文件映射頁面?
- 4. 如何取消映射項目?
- 5. 如何自動將.html頁面重新映射到.aspx頁面?
- 6. 頁面映射問題
- 7. 在HTML頁面中映射
- 8. 頁面映射佈局
- 9. 映射平面文本文件
- 10. 如何使用eclipse插件在TFS中取消映射項目?
- 11. 我如何取消映射只有當一個映射在Vim中
- 12. 下面的Json文件的RestKit映射
- 13. Linux上內存映射文件的巨大頁面
- 14. 如何讀取Hibernate映射
- 15. 映射MARC文件
- 16. Maven映射文件
- 17. 如何使用web.xml映射Html文件?
- 18. 文件映射如何工作
- 19. 如何打開Dyalog APL映射文件
- 20. 如何用Django映射音頻文件?
- 21. 如何在IntelliJ中映射文件?
- 22. 映射器無法讀取gz.parquet文件
- 23. CWinThread消息映射
- 24. 消息映射宏
- 25. 使用HaskellDB取消映射表
- 26. NVIM - 無法取消映射轉義鍵
- 27. 在HandlerMapping中取消註冊映射
- 28. JAXB/EclipseLink:動態取消映射類型
- 29. 內存映射文件 - 映射結構而不是文件?
- 30. 如何使用頁面錯誤處理程序來映射頁面?
我已經進行了一項實驗,到目前爲止我找不到結果。我將在答案中直接描述它。 – Suma 2010-08-19 19:41:46