讓.Net 應用程序突破2G的內存訪問限制(3)_.Net教程
推薦:解讀.NET 2.0中Hashtable快速查找的方法一般來說我們都是用 Hashtable 的 ContainsKey 方法來查找 Hashtable 中是否存在某個鍵值然后讀取他,但是這個方法并不是效率最好的方法。比較好的方法是直接讀取鍵值然后判斷這個對象是否
1、為當前進程申請鎖定內存的權限(注意 調用進程的帳號必須具備鎖定內存的權限,否則這一步會失敗)
2、就是需要申請的頁面數量
3、通過 AllocateUserPhysicalPages API 申請AWE內存
以下為引用的內容:
public AweStream(UInt32 capacity)
{
unsafe
{
// Enable the privilege of lock memory.
lock (_SetLockPagesPrivilegeLockObj)
{
if (!_SetLockPagesPrivilegeOk)
{
LoggedSetLockPagesPrivilege.SetLockPagesPrivilege(System.Diagnostics.Process.GetCurrentProcess(), true);
_SetLockPagesPrivilegeOk = true;
}
}
General.SYSTEM_INFO sysInfo;
General.GetSystemInfo(out sysInfo); // fill the system information structure
_PageSize = sysInfo.dwPageSize;
if ((capacity % _PageSize) != 0)
{
_NumberOfPages = capacity / _PageSize 1;
}
else
{
_NumberOfPages = capacity / _PageSize;
}
_PFNArraySize = (UInt32)(_NumberOfPages * sizeof(UInt64*)); // memory to request for PFN array
_PFNArray = Marshal.AllocHGlobal((int)_PFNArraySize);
UInt32 numberOfPagesInitial = _NumberOfPages;
if (!AweApi.AllocateUserPhysicalPages(System.Diagnostics.Process.GetCurrentProcess().Handle,
ref _NumberOfPages, _PFNArray))
{
Dispose();
throw new AweStreamException("Cannot allocate physical pages", AweStreamException.Reason.CannotAllocatePhysicalPages);
}
_AweAllocated = true;
if (numberOfPagesInitial != _NumberOfPages)
{
Dispose();
throw new AweStreamException(string.Format("Allocated only {0} pages.", _NumberOfPages),
AweStreamException.Reason.AweMemoryNotEnough);
}
_Capacity = _PageSize * _NumberOfPages;
}
}
AWE內存申請完畢后并不能被立即訪問到,我們必須將其映射到32位內存地址中才可以訪問。
下面是內存映射的代碼:
也很簡單:
分享:解讀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的內存訪問限制(3)
。