監(jiān)視cpu:
%processor time :cup執(zhí)行進程所有的時間,如果值持續(xù)在80%-90%的狀態(tài),可能表明需要升級cpu或需要增加更多的處理器
%user time :處理器執(zhí)行用戶進程所用的時間的百分比,該指標(biāo)數(shù)應(yīng)當(dāng)盡量低
%privileged time:處理器炒作系統(tǒng)的內(nèi)核命令(如sqlserver i/o請求)所用的時間百分比,該值盡可能低
如果數(shù)值較高并且physicaldisk計數(shù)器的值很高,應(yīng)當(dāng)考慮提過I/O子系統(tǒng)的性能
system:processor queue length:等待處理器執(zhí)行的進程,如果該數(shù)值總大于2,則需要更高的處理器或增加處理器數(shù)目
內(nèi)存監(jiān)視:
memory:availabel Bytes :系統(tǒng)可用內(nèi)存字節(jié)數(shù),值應(yīng)當(dāng)總大于5000KB,否則操作系統(tǒng)將使用更多的磁盤資源作為虛擬內(nèi)存,
進行頁面交換活動以彌補物理內(nèi)存不足。
memory:pages/sec 系統(tǒng)為解決內(nèi)存中頁面失效而對磁盤讀取的頁面數(shù),該指數(shù)值應(yīng)總小于20,過高的頁面交換活動增加,了磁盤I/O負(fù)載,這是需要擴大計算機物理內(nèi)存容量,Pages/sec 的值很大不一定表明內(nèi)存有問題,而可能是運行使用內(nèi)存映射文件的程序所致
監(jiān)視sql server內(nèi)存使用情況:
process:%working set/sql server:sql server可用內(nèi)存字節(jié)數(shù),該指標(biāo)應(yīng)總大于5000KB,否則表示不存在sql server可用的內(nèi)存
sql server:buffer manager:buffer cache hit ratio :可在緩存中找到而不需要從中讀取的頁的百分比,由于從緩存中讀數(shù)據(jù)比
從磁盤中讀數(shù)據(jù)快,所有這個指標(biāo)應(yīng)當(dāng)大于90%,通常,可用通過增加sql server可用的內(nèi)存數(shù)量來提高緩存命中率
sql server:buffer manager:total pages :告訴緩存中頁的數(shù)目,該計數(shù)器應(yīng)總保持高的值,否則肯能表示磁盤I/O頻繁,并且需要增加內(nèi)存
sql server:memory manager:total server memory(KB) :sql server 服務(wù)器所使用的動態(tài)內(nèi)存的總量,如果該值與計算機的物理內(nèi)存的大小相比一直很高
則表示需要更多的內(nèi)存
監(jiān)控磁盤:
physicaldisk:%disk time :磁盤讀寫活動所用時間的百分比,該指標(biāo)應(yīng)當(dāng)總小于90%
physical disk:avg.disk queue length :平均用多少讀寫請求正在等待訪問磁盤,該指標(biāo)不應(yīng)當(dāng)超過物理磁盤數(shù)量的2倍,正常值<0.5
physicaldisk:disk reads/sec :磁盤讀操作的速率,該指標(biāo)應(yīng)總小于磁盤I/O子系統(tǒng)的容量
physicaldisk:disk writes/sec 磁盤寫操作的速率,該指標(biāo)應(yīng)當(dāng)總小于硬盤I/O子系統(tǒng)的容量
如果memory:pages/sec操作速度較低,并且physicaldisk:%disk time 和physicaldisk:avg.disk queue length的值較高,則可能
存在磁盤凈瓶,請考慮使用速度更快的磁盤驅(qū)動器或?qū)⒛承┪募苿拥狡渌疟P或服務(wù)器。
如果memory:pages/sec操作速度較高,并且physicaldisk:avg.disk queue length 的數(shù)值也較高,則說明內(nèi)存不足。
如果disk reads/sec disk writes/sec指標(biāo)的數(shù)值將要達到硬件I/O子系統(tǒng)的容量極限,
則需要減小這些值,方法是數(shù)據(jù)庫或調(diào)整應(yīng)用程序以減小I/O操作?;蛟黾佑布腎/O容量(如使用高速硬盤或使用raid)
性能計數(shù)器(counter)是描述服務(wù)器或操作系統(tǒng)性能的一些數(shù)據(jù)指標(biāo)。計數(shù)器在性能測試中發(fā)揮著“監(jiān)控和分析”的關(guān)鍵作用,尤其是在分析系統(tǒng)的可擴展性、進行性能瓶頸的定位時,對計數(shù)器的取值的分析非常關(guān)鍵。但必須說明的是,單一的性能計數(shù)器只能體現(xiàn)系統(tǒng)性能的某一個方面,對性能測試結(jié)果的分析必須基于多個不同的計數(shù)器。
與性能計數(shù)器相關(guān)的另一個術(shù)語是“資源利用率”。該術(shù)語指的是系統(tǒng)各種資源的使用狀況。為了方便比較,一般用“資源的實際使用/總的資源可用量”形成資源利用率的數(shù)據(jù),用以進行各種資源使用的比較。
性能測試之內(nèi)存篇(windows)
要監(jiān)視內(nèi)存不足的狀況,請從以下的對象計數(shù)器開始:
· Memory\ Available Bytes
· Memory\ Pages/sec
Available Bytes剩余的可用物理內(nèi)存,單位是兆字節(jié)(參考值:>=10%)。表明進程當(dāng)前可使用的內(nèi)存字節(jié)數(shù)。Pages/sec 表明由于硬件頁面錯誤而從磁盤取出的頁面數(shù),或由于頁面錯誤而寫入磁盤以釋放工作集空間的頁面數(shù)。
如果 Available Bytes 的值很小(4 MB 或更?。瑒t說明計算機上總的內(nèi)存可能不足,或某程序沒有釋放內(nèi)存。如果 Pages/sec 的值為 20 或更大,那么您應(yīng)該進一步研究頁交換活動。Pages/sec 的值很大不一定表明內(nèi)存有問題,而可能是運行使用內(nèi)存映射文件的程序所致。
操作系統(tǒng)經(jīng)常會利用磁盤交換的方式提高系統(tǒng)可用的內(nèi)存量或是提高內(nèi)存的使用效率。下列四個
指標(biāo)直接反映了操作系統(tǒng)進行磁盤交換的頻度。
Page Faults/sec
當(dāng)處理器在內(nèi)存中讀取某一頁出現(xiàn)錯誤時,就會產(chǎn)生缺頁中斷,也就是 page Fault。如果這個頁
位于內(nèi)存的其他位置,這種錯誤稱為軟錯誤,用Transition Fault/sec 來衡量;如果這個頁位于硬盤上,必須從硬盤重新讀取,這個錯誤成為硬錯誤。硬錯誤會使系統(tǒng)的運行效率很快將下來。Page Faults/sec這個計數(shù)器就表示每秒鐘處理的錯誤頁數(shù),包括硬錯誤和軟錯誤。
Page Input/sec
表示為了解決硬錯誤而寫入硬盤的頁數(shù)(參考值:>=Page Reads/sec)
Page Reads/sec
表示為了解決硬錯誤而從硬盤上讀取的頁數(shù)。(參考值: <=5)
Pages/sec
表示為了解決硬錯誤而從硬盤上讀取或?qū)懭胗脖P的頁數(shù)(參考值:00~20)
必須同時監(jiān)視 Available Bytes、Pages/sec 和 Paging File % Usage,以便確定是否發(fā)生這種情況。如果正在讀取非緩存內(nèi)存映射文件,還應(yīng)該查看緩存活動是否正常。
Cathe Bytes
文件系統(tǒng)的緩存(默認(rèn)為50%的可用物理內(nèi)存)
內(nèi)存泄露
· Memory\Available Bytes
· Memory\ Committed Bytes
如果您懷疑有內(nèi)存泄露,請監(jiān)視 Memory\Available Bytes 和 Memory\ Committed Bytes,以觀察內(nèi)存行為,并監(jiān)視你認(rèn)為可能在泄露內(nèi)存的進程的 Process\ Private Bytes、Process\ Working Set 和Process\ Handle Count。如果您懷疑是內(nèi)核模式進程導(dǎo)致了泄露,則還應(yīng)該監(jiān)視 Memory\ Pool Nonpaged Bytes、Memory\ Pool Nonpaged Allocs 和 Process(process_name)\ Pool Nonpaged Bytes。
private Bytes
進程無法與其他進程共享的字節(jié)數(shù)量。該計數(shù)器的值較大時,有可能是內(nèi)存泄露的信號
檢查過于頻繁的頁交換
由于過多的頁交換要使用大量的硬盤空間,因此有可能將導(dǎo)致將頁交換內(nèi)存不足,這容易與導(dǎo)致頁交換的磁盤瓶頸混淆。因此,在研究內(nèi)存不足不太明顯的頁交換的原因時,您必須跟蹤如下的磁盤使用情況計數(shù)器和內(nèi)存計數(shù)器:
· Physical Disk\ % Disk Time
· Physical Disk\ Avg.Disk Queue Length
例如,包括 Page Reads/sec 和 % Disk Time 及 Avg.Disk Queue Length。如果頁面讀取操作速率很低,同時 % Disk Time 和 Avg.Disk Queue Length的值很高,則可能有磁盤瓶徑。但是,如果隊列長度增加的同時頁面讀取速率并未降低,則內(nèi)存不足。
要確定過多的頁交換對磁盤活動的影響,請將 Physical Disk\ Avg.Disk sec/Transfer 和 Memory\ Pages/sec 計數(shù)器的值增大數(shù)倍。如果這些計數(shù)器的計數(shù)結(jié)果超過了 0.1,那么頁交換將花費百分之十以上的磁盤訪問時間。如果長時間發(fā)生這種情況,那么您可能需要更多的內(nèi)存。
研究程序的活動
接下來,檢查正在運行的程序?qū)е碌倪^多的頁交換。如果可能,請停止具有最高工作集值的程序,然后查看頁交換速率是否有顯著變化。如果您懷疑存在過多的頁交換,請檢查 Memory\ Pages/sec 計數(shù)器。該計數(shù)器顯示由于頁面不在物理內(nèi)存中而需要從磁盤讀取的頁面數(shù)。(注意該計數(shù)器與 Page Faults/sec 的區(qū)別,后者只表明數(shù)據(jù)不能在內(nèi)存的指定工作集中立即使用。)
性能測試之處理器篇(windows)
監(jiān)視“處理器”和“系統(tǒng)”對象計數(shù)器可以提供關(guān)于處理器使用的有價值的信息,幫助您決定是否存在瓶頸。需要包含下列內(nèi)容:
Processor\ % Total Processor Time 獲得處理器整體使用情況。
該計數(shù)值用于體現(xiàn)服務(wù)器整體的處理器利用率,對多處理器的系統(tǒng)而言,該計數(shù)值體現(xiàn)的是所有CPU的平均利用率。如果該值的數(shù)值持續(xù)超過90%,則說明整個系統(tǒng)面臨著處理器方面的瓶頸,需要通過增加處理器來提高性能。
要注意的是,由于操作系統(tǒng)本身的特性,在某些多CPU系統(tǒng)中,該數(shù)據(jù)本身并不大,但此時CPU之間的負(fù)載狀況極不均衡,此時也應(yīng)該視作系統(tǒng)產(chǎn)生了處理器方面的瓶頸。
監(jiān)視 Processor\ % Processor Time、Processor\ % User Time 和 % Privileged Time 以獲得詳細(xì)信息。
Processor\ % User Time是指系統(tǒng)的非核心操作消耗的CPU時間,如果該值較大,可以考慮是否通過優(yōu)化算法等方法降低這個值。如果該服務(wù)器是數(shù)據(jù)庫服務(wù)器,Processor\ % User Time大的原因很可能是數(shù)據(jù)庫的排序或是函數(shù)操作消耗了過多的CPU時間,此時可以考慮對數(shù)據(jù)庫系統(tǒng)進行優(yōu)化。
System\ Processor Queue Length 用于瓶頸檢測。
%Total Processor Time
系統(tǒng)中所有處理器都處于繁忙狀態(tài)的時間百分比,對于多處理器系統(tǒng)來說,該值可以反映所有處理器的平均繁忙狀態(tài),該值為100%,如果有一半的處理器為繁忙狀態(tài),該值為50%
File Data Operations/sec
計算機對文件系統(tǒng)進行讀取和寫入操作的頻率,但是不包括文件控制操作
Process Queue Length
線程在等待分配CPU資源所排隊列的長度,此長度不包括正在占有CPU資源的線程。如果該隊列的長度大于處理器個數(shù)+1,就表示處理器有可能處于阻塞狀態(tài)(參考值:<=處理器個數(shù)+1)
%Processor Time
CPU利用率,該計數(shù)器最為常用,可以查看處理器是否處于飽和狀態(tài),如果該值持續(xù)超過 95%,就表示當(dāng)前系統(tǒng)的瓶頸為CPU,可以考慮增加一個處理器或更換一個性能更好的處理器。(參考值:<80%)
%Priviliaged Time
CPU在特權(quán)模式下處理線程所花的時間百分比。一般的系統(tǒng)服務(wù),進城管理,內(nèi)存管理等一些由操作系統(tǒng)自行啟動的進程屬于這類
%User Time
與%Privileged Time計數(shù)器正好相反,指的是在用戶狀態(tài)模式下(即非特權(quán)模式)的操作所花的時間百分比。如果該值較大,可以考慮是否通過算法優(yōu)化等方法降低這個值。如果該服務(wù)器是數(shù)據(jù)庫服務(wù)器,導(dǎo)致此值較大的原因很可能是數(shù)據(jù)庫的排序或是函數(shù)操作消耗了過多的CPU時間,此時可以考慮對數(shù)據(jù)庫系統(tǒng)進行優(yōu)化。
%DPC Time
處理器在網(wǎng)絡(luò)處理上消耗的時間,該值越低越好。在多處理器系統(tǒng)中,如果這個值大于50%并且%Processor Time非常高,加入一個網(wǎng)卡可能會提高性能。
觀察處理器使用情況的值
要測量處理器的活動,請查看 Processor\ % Processor Time 計數(shù)器。該計數(shù)器顯示處理器忙于執(zhí)行非空閑線程所耗時間的百分比。
檢查處理器使用時,請考慮計算機的角色和所完成工作的類型。根據(jù)計算機進行的工作,較高的處理器值意味著系統(tǒng)正有效地處理較重的工作負(fù)載或正在努力維持。例如,如果正在監(jiān)視用戶的計算機,并且該計算機用于計算,計算程序可能容易使用 100% 的處理器時間。即使這會造成該計算機中其他應(yīng)用程序的性能受到影響,但可以通過改變負(fù)載來解決。
另一方面,在處理許多客戶請求的服務(wù)器計算機中,100% 左右的值表示這些過程在隊列中,正在等待處理器時間,并且造成瓶頸。如此持續(xù)高層次的處理器使用對服務(wù)器而言是無法接受的。
考察處理器瓶頸
進程的線程所需要的處理器周期超出可用周期時,處理器瓶頸將逐步顯示出來??梢越⑤^長的處理器隊列,并且系統(tǒng)響應(yīng)會受到影響。處理器瓶頸兩種常見的原因是 CPU 限制程序和產(chǎn)生過多中斷的驅(qū)動程序或子系統(tǒng)組件。
要決定是否由于對處理器時間的要求較高而存在處理器瓶頸,請查看 System\ Processor Queue Length 計數(shù)器。隊列中包含兩個或更多的項目則表明存在瓶頸。如果多個程序進程競爭大多數(shù)處理器時間,安裝更快速的處理器會提高吞吐量。如果正在運行多線程的進程,附加處理器會有所幫助,但是請注意,附加處理器可能只有有限的益處。
此外,跟蹤計算機的服務(wù)器工作隊列當(dāng)前長度的 Server Work Queues\ Queue Length 計數(shù)器會顯示出處理器瓶頸。隊列長度持續(xù)大于 4 則表示可能出現(xiàn)處理器擁塞。此計數(shù)器是特定時間的值,而不是一段時間的平均值。
要決定中斷活動是否造成瓶頸,請觀察 Processor\ Interrupts/sec 計數(shù)器的值,該計數(shù)器測量來自輸入/輸出 (I/O) 設(shè)備的服務(wù)請求的速度。如果此計數(shù)器的值明顯增加,而系統(tǒng)活動沒有相應(yīng)增加,則表明存在硬件問題。
也可以對生成中斷的磁盤驅(qū)動器、網(wǎng)卡和其他設(shè)備活動的間接指示器監(jiān)視 Processor\ % Interrupt Time 時間。
注意
要檢測可能影響處理器性能的硬件問題,例如 IRQ 沖突,請觀察 System\ File Control Bytes/second 的值。
監(jiān)視多處理器系統(tǒng)
要觀察多處理器計算機的效率,請使用下列附加計數(shù)器。
計數(shù)器
說明
Process\ % Processor Time
過程的所有線程在每個處理器上的處理器時間總和。
Processor(_Total)\ % Processor Time
計算機中所有處理器的處理器活動的度量。
"N[{y8_0此計數(shù)器采樣間隔期間的所有處理器平均非空閑時間的總和,并用處理器數(shù)目除以該和。51Testing軟件測試網(wǎng)
t#e_5I:N2y8@"a:X:Y
例如,如果所有處理器平均忙半個采樣間隔,則顯示 50%。如果半數(shù)處理器忙整個間隔,而其他的處理器空閑,則也顯示 50%。
Thread\ % Processor Time
線程的處理器時間數(shù)
性能測試之磁盤篇(windows)
監(jiān)測對象:PhysicalDisk
如果分析的計數(shù)器指標(biāo)來自于數(shù)據(jù)庫服務(wù)器、文件服務(wù)器或是流媒體服務(wù)器,磁盤I/O對這些系統(tǒng)來說更容易成為瓶頸。
每磁盤的I/O數(shù)可用來與磁盤的I/O能力進行對比,如果經(jīng)過計算得到的每磁盤I/O數(shù)超過了磁盤標(biāo)稱的I/O能力,則說明確實存在磁盤的性能瓶頸。
下表給出了每磁盤I/O的計算公式:
RAID類型
計算方法
RAID0
(Reads+Writes)/Number of Disks
RAID1
(Reads+2*Writes)/2
RAID5
[Reads+(4*Writes)]/Number of Disks
RAID10
[Reads+(2*Writes)]/Number of Disks
%Disk Time
表示磁盤驅(qū)動器為讀取或?qū)懭胝埱筇峁┓?wù)所用的時間百分比,如果只有%Disk Time比較大,硬盤有可能是瓶頸
Average Disk Queue Length
表示磁盤讀取和寫入請求提供服務(wù)所用的時間百分比,可以通過增加磁盤構(gòu)造磁盤陣列來提高性能(<=磁盤數(shù)的2倍)
Average Disk Read Queue Length
表示磁盤讀取請求的平均數(shù)
Average Disk write Queue Length
表示磁盤寫入請求的平均數(shù)
Average Disk sec/Read
磁盤中讀取數(shù)據(jù)的平均時間,單位是s
Disk Bytes/sec 提供磁盤系統(tǒng)的吞吐率。
決定工作負(fù)載的平衡
要平衡網(wǎng)絡(luò)服務(wù)器上的負(fù)載,需要了解服務(wù)器磁盤驅(qū)動器的繁忙程度。使用 Physical Disk\ % Disk Time 計數(shù)器,該計數(shù)器顯示驅(qū)動器活動時間的百分比。如果 % Disk Time 較高(超過 90%),請檢查 Physical Disk\ Current Disk Queue Length 計數(shù)器以查看正在等待磁盤訪問的系統(tǒng)請求數(shù)量。等待 I/O 請求的數(shù)量應(yīng)當(dāng)保持在不大于組成物理磁盤的主軸數(shù)的 1.5 到 2 倍。
Average Disk sec/Transfer
磁盤中寫入數(shù)據(jù)的平均時間,單位是s
計數(shù)器反映磁盤完成請求所用的時間。較高的值表明磁盤控制器由于失敗而不斷重試該磁盤。這些故障會增加平均磁盤傳送時間。一般來說,定義該值小于15ms最為優(yōu)異,介于15-30ms之間為良好,30-60ms之間為可以接受,超過60ms則需要考慮更換硬盤或硬盤的RAID方式了
Average Disk Bytes/Transfer
值大于 20 KB 表示該磁盤驅(qū)動器通常運行良好;如果應(yīng)用程序正在訪問磁盤,則會產(chǎn)生較低的值。例如,隨機訪問磁盤的應(yīng)用程序會增加平均 Disk sec/Transfer 時間,因為隨機傳送需要增加搜索時間。
性能測試之網(wǎng)絡(luò)篇(windows)
監(jiān)測對象:Network Interface
網(wǎng)絡(luò)分析是一件技術(shù)含量很高的工作,在一般的組織中都有專門的網(wǎng)絡(luò)管理人員進行網(wǎng)絡(luò)分析,對測試工程師來說,如果懷疑網(wǎng)絡(luò)是系統(tǒng)的瓶頸,可以要求網(wǎng)絡(luò)仍有來寫真進行網(wǎng)絡(luò)方面的檢測。
Network Interface\Bytes Total/sec為發(fā)送和接收字節(jié)的速率(包括幀字符在內(nèi))??梢酝ㄟ^該計數(shù)器的值判斷網(wǎng)絡(luò)連接速度是否是瓶頸,具體操作方法是用該計數(shù)器的值與目前的網(wǎng)絡(luò)帶寬進行比較。
Byte Total/sec
表示網(wǎng)絡(luò)中接受和發(fā)送字節(jié)的速度,可以用該計數(shù)器來判斷網(wǎng)絡(luò)是否存在瓶頸(參考值:該計數(shù)器和網(wǎng)絡(luò)帶寬相除,<50%)
性能測試之進程篇(windows)
查看進程的%Processor Time值
每個進程的%Processor Time反映進程所消耗的處理器時間。用不同進程所消耗的處理器時間進行對比,可以很容易的看出具體是哪個進程在性能測試過程中消耗了最多的處理器時間,從而可以據(jù)此針對應(yīng)用進行優(yōu)化。
查看每個進程產(chǎn)生的頁面失效
可以用每個進程產(chǎn)生的頁面失效(通過Process\Page Failures/sec計數(shù)器獲得)和系統(tǒng)的頁面失效(可通過Memory\Page Failures/sec計數(shù)器獲得)的比值,來判斷哪個進程產(chǎn)生了最多的失效頁面,這個進程要么是需要大量內(nèi)存的進程,要么是非?;钴S的進程,可以對其進行中的分析。
了解進程的Process\Private Bytes
Process\Private Bytes是指進程所分配的無法與其他進程共享的當(dāng)前字節(jié)數(shù)量。該計數(shù)器主要用拉判斷進程在性能測試過程中有無內(nèi)存泄漏。
例如:對于一個IIS之上的web應(yīng)用,我們可以重點監(jiān)控inetinfo進程的Private Bytes,如果在性能測試過程中,該進程的Private Bytes計數(shù)器值不斷增加,或是性能測試停止后一段時間,該進程的Private Bytes仍然持續(xù)在高水平,則說明應(yīng)用存在內(nèi)存泄漏。
(備注:進程分析方法用到的計數(shù)器主要有:Process\%Processor Time、Page Failures/sec、Page Failures/sec、Private Bytes)
相關(guān)鏈接:
① 內(nèi)存映射文件機制
內(nèi)存映射文件是利用虛擬內(nèi)存把文件映射到進程的地址空間中去,在此之后進程操作文件,就像操作進程空間里的地址一樣了,省去了讀和寫I/O的時間。
比如使用memcpy等內(nèi)存操作的函數(shù)。這種方法能夠很好的應(yīng)用在需要頻繁處理一個文件或者是一個大文件的場合,這種方式處理IO效率比普通IO效率要高。
利用內(nèi)存映射文件您可以認(rèn)為操作系統(tǒng)已經(jīng)為您把文件全部裝入了內(nèi)存,然后您只要移動文件指針進行讀寫即可了。這樣您甚至不需要調(diào)用那些分配、釋放內(nèi)存塊和文件輸入/輸出的API函數(shù),另外您可以把這用作不同的進程之間共享數(shù)據(jù)的一種辦法。運用內(nèi)存映射文件實際上沒有涉及實際的文件操作,它更象為每個進程保留一個看得見的內(nèi)存空間。至于把內(nèi)存映射文件當(dāng)成進程間共享數(shù)據(jù)的辦法來用,則要加倍小心,因為您不得不處理數(shù)據(jù)的同步問題,否則您的應(yīng)用程序也許很可能得到過時或錯誤的數(shù)據(jù)甚至崩潰。
內(nèi)存映射文件本身還是有一些局限性的,譬如一旦您生成了一個內(nèi)存映射文件,那么您在那個會話期間是不能夠改變它的大小的。所以內(nèi)存映射文件對于只讀文件和不會影響其大小的文件操作是非常有用的。當(dāng)然這并不意味著對于會引起改變其大小的文件操作就一定不能用內(nèi)存影射文件的方法,您可以事先估計操作后的文件的可能大小,然后生成這么大小一塊的內(nèi)存映射文件,然后文件的長度就可以增長到這么一個大小。我們的解釋夠多的了,接下來我們就看看實現(xiàn)的細(xì)節(jié):
調(diào)用CreateFile打開您想要映射的文件。
調(diào)用CreateFileMapping,其中要求傳入先前CreateFile返回的句柄,該函數(shù)生成一個建立在CreateFile函數(shù)創(chuàng)建的文件對象基礎(chǔ)上的內(nèi)存映射對象。
調(diào)用MapViewOfFile函數(shù)映射整個文件的一個區(qū)域或者整個文件到內(nèi)存。該函數(shù)返回指向映射到內(nèi)存的第一個字節(jié)的指針。
用該指針來讀寫文件。
調(diào)用UnmapViewOfFile來解除文件映射。
調(diào)用CloseHandle來關(guān)閉內(nèi)存映射文件。注意必須傳入內(nèi)存映射文件的句柄。
調(diào)用CloseHandle來關(guān)閉文件。注意必須傳入由CreateFile創(chuàng)建的文件的句柄。