日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

讓.Net 應(yīng)用程序突破2G的內(nèi)存訪問限制(2)_.Net教程

編輯Tag賺U幣
教程Tag:暫無Tag,歡迎添加,賺取U幣!

推薦:解讀.NET 2.0中Hashtable快速查找的方法
一般來說我們都是用 Hashtable 的 ContainsKey 方法來查找 Hashtable 中是否存在某個鍵值然后讀取他,但是這個方法并不是效率最好的方法。比較好的方法是直接讀取鍵值然后判斷這個對象是否

由于需要鎖定物理內(nèi)存,所以運行AWE功能的程序,必須要具備鎖定內(nèi)存的權(quán)限,系統(tǒng)管理員帳號是沒有這個權(quán)限的,只有 System帳號有這個權(quán)限。當(dāng)然你也可以在本地安全設(shè)置中指定某個帳號擁有這個權(quán)限。方法如下:

gpedit.msc ->Windows Settings->Security Settings->Local Policies->User Rights Assignment->Lock pages in memory

談完鎖定內(nèi)存的問題,我們再看看上面那個圖,我們會發(fā)現(xiàn)雖然AWE允許訪問最多64G的內(nèi)存,但這64G內(nèi)存是被AWE映射到一個32位的用戶模式下的內(nèi)存地址中去的,也就是說通常情況下,我們最多可以同時訪問64G內(nèi)存中的2G內(nèi)存 (如果配置了/3G開關(guān),可以同時訪問最多16G內(nèi)存中的3G內(nèi)存),如果要訪問整個64G的內(nèi)存,我們需要將一些不訪問的內(nèi)存取消映射,這樣可以空出足夠的用戶模式下的虛擬內(nèi)存地址來訪問我們需要訪問的內(nèi)存。因此我封裝的類中添加了Map和UnMap兩個方法,讓調(diào)用者可以根據(jù)實際情況來決定映射和去映射。2G的32位虛擬內(nèi)存地址對于我們來是是如此的寶貴,調(diào)用者在貪婪的消耗大量內(nèi)存時一定要注意節(jié)約這個資源。

談完這些東西,下面讓我們結(jié)合代碼來看看在.Net 下如何來操作AWE 內(nèi)存吧。

為了方便.Net 程序員訪問AWE內(nèi)存,我封裝了一個AweStream類,這個類繼承自Stream類。.Net程序員可以像操作普通的MemoryStream流那樣操作AWE內(nèi)存。同時我還為那些對效率要求非�?量痰恼{(diào)用者提供了一個通過指針訪問AWE內(nèi)存的方法。

調(diào)用示例如下:注意必須在構(gòu)造函數(shù)中指明申請的AWE內(nèi)存的大小。

以下為引用的內(nèi)容:

byte[] inputBuffer = new byte[1024];

Stopwatch stopWatch = new Stopwatch();

using (AweStream.AweStream aweStream = new AweStream.AweStream(1024 * 1024 * 100))
{
//Map
aweStream.Map();
stopWatch.Start();

//Copy one bytes
//Use unsafe pointer
for (int i = 0; i < 1024 * 1024 * 100; i )
{
unsafe
{
aweStream.LpMemory[i] = 1;
}
}

stopWatch.Stop();

Console.WriteLine(stopWatch.ElapsedMilliseconds);

aweStream.Position = 0;


//Block copy
stopWatch.Reset();
stopWatch.Start();

for (int i = 0; i < 1024 * 100; i )
{
unsafe
{
aweStream.Write(inputBuffer, 0, 1024);
}
}

stopWatch.Stop();

Console.WriteLine(stopWatch.ElapsedMilliseconds);

//UnMap
aweStream.UnMap();
}

我在 6G內(nèi)存 windows 2003 企業(yè)版的環(huán)境中做了測試,申請內(nèi)存到5G以上沒有任何問題。

下面再看看如何來申請AWE內(nèi)存

下面的AweStream構(gòu)造函數(shù)完成了對AWE內(nèi)存的申請過程。

整個申請過程分為下面幾步

分享:解讀26個ASP.Net開發(fā)新手的常見問題
一位ASP.net初學(xué)者學(xué)習(xí)過程中整理的備忘錄,包括“打開新的窗口并傳送參數(shù),為按鈕添加對話框,刪除表格選定記錄,刪除表格記錄警告”等等常見問題的解決方法。 1. 打開新的窗

來源:模板無憂//所屬分類:.Net教程/更新時間:2008-12-05
相關(guān).Net教程