Vom Aufrufer reservierte Puffer in der Profilerstellungs-API
Aktualisiert: November 2007
ICorProfilerInfo-Methoden, die vom Aufrufer reservierte Puffer verwenden, entsprechen normalerweise der folgenden Signatur.
HRESULT GetBuffer
(
[in] /* Some query information (for example, a name).*/,
[in] ULONG32 cBufferSizeStart,
[out] ULONG32 *pcBufferMax,
[out] /* TYPE */ InfoBuffer[]
);
Diese Methoden verhalten sich immer wie folgt:
Der cBufferSizeStart-Parameter gibt die Anzahl der im Puffer reservierten Elemente an. Dieser Wert stellt die Größe des Puffers dar, die vom Aufrufer dieser Methode reserviert wird.
Der pcBufferMax-Parameter wird auf die Gesamtanzahl verfügbarer Elemente festgelegt. Nach der Methodenrückgabe wird pcBufferMax auf die maximale Anzahl Elemente festgelegt, die hätten zurückgegeben werden können, anstatt auf die Anzahl an Elementen, die tatsächlich zurückgegeben wurden. Somit ist pcBufferMax von der eigentlichen Größe des vom Aufrufer reservierten Puffers unabhängig.
Der InfoBuffer-Parameter gibt den vom Aufrufer reservierten Puffer an. Er wird vom Aufrufer dieser Methode erstellt. Seine Größe wird von cBufferSizeStart angegeben. Nach der Methodenrückgabe wird dieser Puffer mit so vielen Elementen wie möglich gefüllt. Es sind möglicherweise mehr Elemente verfügbar, als der Puffer aufnehmen kann. Wenn InfoBuffer NULL ist, muss cBufferSizeStart 0 (null) sein. Wenn mindestens ein Element zurückgegeben wird, gibt die Methode S_OK zurück und legt pcBufferMax auf die Gesamtanzahl verfügbarer Elemente fest.
Hinweise
Es gibt zwei Möglichkeiten, mit vom Aufrufer reservierten Puffern zu arbeiten:
Einzeldurchlauf-Methode: Reservieren Sie eine Puffergröße, von der Sie annehmen, dass sie für alle zurückgegebenen Elemente ausreichend ist. Rechnen Sie damit, den Puffer neu reservieren zu müssen, falls er sich als zu klein erweist. Andernfalls kann es zu einer Datenkürzung kommen.
Doppeldurchlauf-Methode: Alternativ können Sie die Methode zweimal aufrufen. Geben Sie beim ersten Aufruf für den InfoBuffer-Parameter die Länge 0 (null) an, um die richtige Puffergröße zu ermitteln. Legen Sie dann die Puffergröße auf den Wert fest, der von pcBufferMax zurückgegeben wurde, und rufen Sie die Funktion erneut auf.
Die erste Methode ist schneller und vermeidet dynamische Speicherreservierung. Es kann jedoch passieren, dass Sie den Puffer neu reservieren müssen, wenn er nicht groß genug für alle Daten ist.
Die zweite Methode ist langsamer, da sie zwei Aufrufe und dynamische Speicherreservierung beinhaltet. Nehmen wir zum Beispiel an, dass in einer Abfrage der Name einer Anwendungsdomäne angefordert wurde. Nach der Methodenrückgabe müssen Sie überprüfen, ob der InfoBuffer groß genug war, um den vollständigen Namen der Anwendungsdomäne aufzunehmen. Vergleichen Sie hierzu den Wert, auf den pcBufferMax verweist, mit dem Wert des cBufferSizeStart-Parameters. Wenn pcBufferMax auf einen Wert zeigt, der größer als cBufferSizeStart ist, reservieren Sie mehr InfoBuffer-Puffer, aktualisieren Sie cBufferSizeStart mit der neuen Größe, und rufen Sie die Methode erneut auf.
Siehe auch
Weitere Ressourcen
Allgemeine Features in der Profilerstellungs-API