Freigeben über


CLFS Marshalling-Bereiche

Ein CLFS-Client (Common Log File System) fügt Protokolldatensätze an einen Marshallbereich im flüchtigen Speicher an, und CLFS schreibt diese Datensätze regelmäßig in stabilen Speicher. Ein Marshallbereich ist eine Sammlung von Protokoll-E/A-Puffern, die jeweils mehrere Protokolldatensätze enthalten können. Protokoll-E/A-Puffer enthalten Datensätze, die kürzlich in einen Stream geschrieben wurden (aber möglicherweise nicht in stabilen Speicher gelöscht wurden), sowie Datensätze, die kürzlich aus dem Stream gelesen wurden.

Sie erstellen einen Marshallingbereich, indem Sie ClfsCreateMarshallingArea aufrufen. Zu diesem Zeitpunkt müssen Sie die Größe der Protokoll-E/A-Puffer angeben, die vom Marshallbereich verwendet werden, und ob sich diese Puffer im ausgelagerten oder nicht ausgelagerten Pool befinden. Alle Protokoll-E/A-Puffer in einem Marshallingbereich haben die gleiche Größe, und CLFS stellt sicher, dass die Größe ein Vielfaches der Sektorgröße auf dem zugrunde liegenden stabilen Speichermedium ist. Das heißt, CLFS übernimmt ihre angeforderte Größe und rundet sie nach Bedarf auf, um Ihre E/A-Puffer mit dem stabilen Speichermedium kompatibel zu machen.

CLFS ordnet Protokoll-E/A-Puffer nach Bedarf zu und gibt diese frei. Sie haben jedoch die Möglichkeit, die maximale Anzahl von E/A-Puffern festzulegen, die gleichzeitig zugeordnet werden können. Sie haben auch die Möglichkeit, Ihre eigenen Pufferzuordnungs- und Deallocationfunktionen bereitzustellen.

Um die maximale Anzahl von Protokoll-E/A-Puffern anzugeben, die gleichzeitig zum Schreiben von Protokolldatensätzen zugewiesen werden können, legen Sie den Parameter cMaxWriteBuffers der Funktion ClfsCreateMarshallingArea fest. Die Begrenzung der Anzahl von Puffern wirkt sich auf die Häufigkeit von Leervorgängen auf stabilen Speicher aus. Mit weniger Puffern müssen Protokolldatensätze häufiger in stabilen Speicher geschrieben werden. Wenn Sie die Leerfrequenz nicht steuern müssen, legen Sie cMaxWriteBuffers auf INFINITE fest (definiert in Winbase.h).

Um die maximale Anzahl von Protokoll-E/A-Puffern anzugeben, die gleichzeitig zum Lesen von Protokolldatensätzen zugeordnet werden können, legen Sie den cMaxReadBuffers-Parameter der ClfsCreateMarshallingArea-Funktion fest. Wenn Sie die Anzahl der zugeordneten Lesepuffer nicht steuern müssen, legen Sie cMaxReadBuffers auf INFINITE fest.

Wenn Sie Ihre eigene Speicherzuordnung für Protokoll-E/A-Puffer durchführen möchten, legen Sie die Parameter pfnAllocBuffer und pfnFreeBuffer der ClfsCreateMarshallingArea-Funktion so fest, dass sie auf Ihre eigenen Zuordnungs- und Deallocationfunktionen verweisen. Dann ruft CLFS Ihre Funktionen auf, um die tatsächliche Speicherzuordnung und -zuordnung durchzuführen, wenn Protokoll-E/A-Puffer erstellt oder freigegeben werden müssen.

In einigen Fällen sollten Sie platz in einem Marshallbereich im Voraus reservieren. Sie können beispielsweise wissen, dass Sie einen Satz von zehn Protokolldatensätzen schreiben und sicherstellen möchten, dass im Marshallingbereich genügend Platz für die gesamte Gruppe vorhanden ist. Um Speicherplatz für die zehn Datensätze zu reservieren, erstellen Sie ein Array mit zehn Elementen, das die Größen der Datensätze enthält, und übergeben Sie das Array dann an die Funktion ClfsReserveAndAppendLog im Parameter rgcbReservation . ClfsReserveAndAppendLog ist eine Mehrzweckfunktion, die Speicherplatz in einem Marshallbereich reserviert oder Protokolldatensätze an einen Stream anhängt oder beides atomar ausführt. Wenn Sie die Parameter entsprechend festlegen, können Sie ClfsReserveAndAppendLog aufrufen, um Speicherplatz für die zukünftige Verwendung zu reservieren, ohne tatsächlich Datensätze an den Stream anzufügen.