Freigeben über


PrefetchVirtualMemory-Funktion (memoryapi.h)

Stellt einen effizienten Mechanismus bereit, um potenziell unauffällige virtuelle Adressbereiche in einen Prozessadressraum in den Arbeitsspeicher zu integrieren.

Syntax

BOOL PrefetchVirtualMemory(
  [in] HANDLE                    hProcess,
  [in] ULONG_PTR                 NumberOfEntries,
  [in] PWIN32_MEMORY_RANGE_ENTRY VirtualAddresses,
  [in] ULONG                     Flags
);

Parameter

[in] hProcess

Behandeln Sie den Prozess, dessen virtuelle Adressbereiche vorab festgelegt werden sollen. Verwenden Sie die GetCurrentProcess-Funktion , um den aktuellen Prozess zu verwenden.

[in] NumberOfEntries

Anzahl der Einträge in dem Array, auf das vom Parameter VirtualAddresses verwiesen wird.

[in] VirtualAddresses

Zeiger auf ein Array von WIN32_MEMORY_RANGE_ENTRY Strukturen, die jeweils einen virtuellen Adressbereich angeben, der vorab abgerufen werden soll. Die virtuellen Adressbereiche können jeden Teil des Prozessadressraums abdecken, auf den der Zielprozess zugreifen kann.

[in] Flags

Reserviert. Muss den Wert 0 (null) haben.

Rückgabewert

Wenn die Funktion erfolgreich ist, ist der Rückgabewert ein Nichtzero-Wert.

Wenn die Funktion fehlerhaft ist, ist der Rückgabewert 0 (null). Um erweiterte Fehlerinformationen zu erhalten, rufen Sie GetLastError auf.

Hinweise

Die PrefetchVirtualMemory-Funktion richtet sich an Anwendungen, die den Adresssatz, auf den sie zugreifen, mit angemessener Sicherheit kennen. Wenn diese Adressen wahrscheinlich nicht mehr im Arbeitsspeicher vorhanden sind (d. h. sie wurden auf den Datenträger ausgelagert), wird durch das Aufrufen der PrefetchVirtualMemory-Funktion in diesen Adressbereichen vor dem Zugriff die Gesamtlatenz verringert, da die API diese Adressbereiche effizient vom Datenträger mit großen gleichzeitigen E/A-Anforderungen nach Möglichkeit einbezieht.

Mit der PrefetchVirtualMemory-Funktion können Anwendungen die Datenträgerhardware effizient nutzen, indem sie nach Möglichkeit große gleichzeitige E/A-Vorgänge ausstellen, wenn die Anwendung eine Liste von Prozessadressbereichen bereitstellt, auf die zugegriffen werden soll. Selbst für einen einzelnen Adressbereich (z. B. eine Dateizuordnung) kann die PrefetchVirtualMemory-Funktion Leistungsverbesserungen bieten, indem sie eine einzelne große E/A anstelle der vielen kleineren E/A-Vorgänge ausgibt, die durch Seitenfehler ausgegeben würden.

Die PrefetchVirtualMemory-Funktion ist eine reine Leistungsoptimierung: Prefetching ist für den Zugriff auf die Zieladressbereiche nicht erforderlich. Der vorab eingestellte Arbeitsspeicher wird dem Arbeitssatz des Zielprozesses nicht hinzugefügt. es wird im physischen Arbeitsspeicher zwischengespeichert. Wenn der Zielprozess auf die vordefinierten Adressbereiche zugreift, werden sie dem Arbeitssatz hinzugefügt.

Da die PrefetchVirtualMemory-Funktion für den korrekten Betrieb von Anwendungen nie erforderlich sein kann, wird sie vom System als starker Hinweis behandelt und unterliegt den üblichen Einschränkungen des physischen Arbeitsspeichers, bei denen sie unter Bedingungen mit wenig Arbeitsspeicher vollständig oder teilweise ausfallen kann. Es kann auch Zulasten des Arbeitsspeichers erzeugen, wenn mit großen Adressbereichen aufgerufen wird, sodass Anwendungen nur Adressbereiche vorab abrufen sollten, die sie tatsächlich verwenden.

Um eine Anwendung zu kompilieren, die diese Funktion aufruft, definieren Sie _WIN32_WINNT als _WIN32_WINNT_WIN8 oder höher. Weitere Informationen finden Sie unter Verwenden der Windows-Header.

Anforderungen

   
Unterstützte Mindestversion (Client) Windows 8 [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2012 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile memoryapi.h (einschließlich Windows.h, Memoryapi.h)
Bibliothek onecore.lib
DLL Kernel32.dll

Siehe auch

Speicherverwaltungsfunktionen

WIN32_MEMORY_RANGE_ENTRY