PrefetchVirtualMemory 函式 (memoryapi.h)
提供有效率的機制,以將進程位址空間中可能不明確的虛擬位址範圍帶入記憶體中。
語法
BOOL PrefetchVirtualMemory(
[in] HANDLE hProcess,
[in] ULONG_PTR NumberOfEntries,
[in] PWIN32_MEMORY_RANGE_ENTRY VirtualAddresses,
[in] ULONG Flags
);
參數
[in] hProcess
處理要預先擷取其虛擬位址範圍的進程。 使用 GetCurrentProcess 函式來使用目前的進程。
[in] NumberOfEntries
VirtualAddresses參數所指向之陣列中的專案數。
[in] VirtualAddresses
WIN32_MEMORY_RANGE_ENTRY結構的陣列指標,每個結構都會指定要預先擷取的虛擬位址範圍。 虛擬位址範圍可能涵蓋目標進程可存取之進程位址空間的任何部分。
[in] Flags
保留的。 必須是 0。
傳回值
如果函式成功,則傳回值是非零值。
如果函式失敗,傳回值為 0 (零) 。 若要取得擴充的錯誤資訊,請呼叫 GetLastError。
備註
PrefetchVirtualMemory函式是以應用程式為目標,這些應用程式會以合理信賴方式存取的位址集為目標。 如果這些位址可能不再位於記憶體 (,亦即,這些位址已分頁到磁片) ,請在這些位址範圍上呼叫 PrefetchVirtualMemory 函式,以降低整體延遲,因為 API 會盡可能使用大型並行 I/O 要求,有效率地從磁片帶入這些位址範圍。
PrefetchVirtualMemory函式可讓應用程式盡可能在應用程式提供要存取的進程位址範圍清單時,發出大型並行 I/O,以有效使用磁片硬體。 即使是單一位址範圍 (例如檔案對應) , PrefetchVirtualMemory 函式仍可藉由發出單一大型 I/O 來提供效能改善,而不是透過分頁錯誤發出的許多較小 I/O。
PrefetchVirtualMemory函式只是效能優化:存取目標位址範圍不需要預先擷取。 預先擷取的記憶體不會新增至目標進程的工作集;它會快取在實體記憶體中。 當目標進程存取預先擷取的位址範圍時,它們將會新增至工作集。
由於 預先擷取VirtualMemory 函式永遠不需要正確操作應用程式,因此系統會將其視為強式提示,而且受限於在低記憶體情況下完全或部分失敗的一般實體記憶體限制。 如果以大型位址範圍呼叫,它也可以建立記憶體壓力,因此應用程式應該只預先擷取實際使用的位址範圍。
若要編譯呼叫此函式的應用程式,請將 _WIN32_WINNT 定義為 _WIN32_WINNT_WIN8 或更高版本。 如需詳細資訊,請參閱 使用 Windows 標頭。
需求
最低支援的用戶端 | Windows 8 [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2012 [僅限傳統型應用程式] |
目標平台 | Windows |
標頭 | memoryapi.h (包括 Windows.h、Memoryapi.h) |
程式庫 | onecore.lib |
DLL | Kernel32.dll |