讓.Net 應用程序突破2G的內存訪問限制_.Net教程
推薦:解讀.NET 2.0中Hashtable快速查找的方法一般來說我們都是用 Hashtable 的 ContainsKey 方法來查找 Hashtable 中是否存在某個鍵值然后讀取他,但是這個方法并不是效率最好的方法。比較好的方法是直接讀取鍵值然后判斷這個對象是否
32位Windows操作系統下單個進程的用戶模式內存訪問的限制是2G,如果在boot.ini中設置了/3G開關,則最大為3G,超過3G將無法訪問。由于Hubble.net 項目是一個數據庫系統,必須要考慮使用大內存緩存數據的問題,于是最近對這個問題進行了一些研究。其實這塊的技術是現成的,32位操作系統下只有通過AWE的方式來擴展內存。這塊的文章也很多,但很少有.net 下如何使用的實例,我做了一個類似MemoryStream的封裝,可以讓.Net程序員輕松操作AWE內存,從而使其程序輕松突破2G內存的限制。
在開始這篇文章之前,我們還是先來了解一下AWE.
AWE (Address Windowing Extensions)是 Windows 的內存管理功能的一組擴展,它使應用程序能夠使用的內存量超過通過標準 32 位尋址可使用的 2-3 GB 內存。AWE 允許應用程序獲取物理內存,然后將非分頁內存的視圖動態映射到 32 位地址空間。雖然 32 位地址空間限制為 4 GB,但是非分頁內存卻可以遠遠大于 4 GB。這使需要大量內存的應用程序(如大型數據庫系統)能使用的內存量遠遠大于 32 位地址空間所支持的內存量。

如上圖所示AWE 實際上就是將用戶模式下的32位內存地址映射到用戶需要訪問的物理內存上去。不同操作系統運行被映射的物理內存大小是不一樣的。
Vista, XP 和 Windows 2003 標準版 最多可以映射 4G 內存。
Windows 2003 企業版的限制是32G (要使用超過4G的內存必須打開 /PAE 開關)
Windows 2003 數據中心版本限制是64G (要使用超過4G的內存必須打開 /PAE 開關)
由于被映射的物理內存為不分頁內存,無法進行頁保護,為了保證內存使用的安全,防止其他進程越界訪問,AWE 在映射這些內存之前必須將這些內存鎖定,即只有鎖定這塊內存的進程可以訪問這塊內存,其它進程無法訪問。這里就產生了一個有趣的現象,我們可以在windows 下像實時操作系統那樣操作物理內存,而不用擔心操作系統進行頁交換時對系統實時性的影響。雖然不采用AWE,也可以通過VirtualLock API函數來鎖定物理內存,但這個函數在一個進程中最多可以鎖定30個頁面,以一個頁大小4096來計算,最多可以鎖定30*4094字節的內存。當然這是默認設置,你也可以通過調整工作 WorkingSet 來調整。看來AWE對于那些實時性比較高的應用,比如游戲,動畫,通訊等還確實是一個福音。
分享:解讀26個ASP.Net開發新手的常見問題一位ASP.net初學者學習過程中整理的備忘錄,包括“打開新的窗口并傳送參數,為按鈕添加對話框,刪除表格選定記錄,刪除表格記錄警告”等等常見問題的解決方法。 1. 打開新的窗
- asp.net如何得到GRIDVIEW中某行某列值的方法
- .net SMTP發送Email實例(可帶附件)
- js實現廣告漂浮效果的小例子
- asp.net Repeater 數據綁定的具體實現
- Asp.Net 無刷新文件上傳并顯示進度條的實現方法及思路
- Asp.net獲取客戶端IP常見代碼存在的偽造IP問題探討
- VS2010 水晶報表的使用方法
- ASP.NET中操作SQL數據庫(連接字符串的配置及獲取)
- asp.net頁面傳值測試實例代碼
- DataGridView - DataGridViewCheckBoxCell的使用介紹
- asp.net中javascript的引用(直接引入和間接引入)
- 三層+存儲過程實現分頁示例代碼
- 相關鏈接:
- 教程說明:
.Net教程-讓.Net 應用程序突破2G的內存訪問限制
。