分散トランザクション処理機能 TP1/Connector for .NET Framework 使用の手引

[目次][用語][索引][前へ][次へ]

1.5.3 バッファの取得と解放

<この項の構成>
(1) バッファの取得
(2) バッファの解放

(1) バッファの取得

TP1ConnectionManagerクラスは,GetMessageBufferメソッドのパラメタに指定されたメッセージ長を保持できるメッセージバッファを生成します。

バッファ取得時のバッファプールの構造を,次の図に示します。

図1-27 バッファ取得時のバッファプールの構造

[図データ]

メッセージバッファは,TP1ConnectionManagerクラスがプール管理するバッファを内部に取得します。取得するバッファは,GetMessageBufferメソッドのパラメタに指定されたメッセージ長を保持できる,最も小さいサイズのバッファです。

指定されたメッセージ長を保持できる,最も小さいサイズのバッファがバッファプール内に存在しない場合は,バッファを新規生成してメッセージバッファを生成します。この場合,バッファプールのバッファが解放されるまでは,GetMessageBufferメソッドが呼び出されるたびにバッファを新規生成し,メッセージバッファを生成します。

注意
GetMessageBufferメソッドに,構成定義で指定したバッファプールサイズの最大値を超えるサイズが指定された場合は,最大サイズ(1048576バイト)のバッファプールからバッファを取得します。ただし,このメッセージバッファが最大サイズのバッファを取得するのは,処理を続行させるためです。アプリケーションが最大サイズのバッファを何度も使い続けると,性能およびリソースへの影響が大きくなります。そのため,構成定義で指定するバッファサイズの値は,アプリケーションの用途に合わせて見積もってください。
なお,RPC送受信メッセージの最大長拡張機能を使用する場合は,GetMessageBufferメソッドに構成定義で指定したバッファプールサイズの最大値を超えるサイズが指定されたときでも,<option>要素のmaxMessageSize属性で指定した値(×1048576バイト)が設定されます。

(2) バッファの解放

バッファ解放時のバッファプールの構造を,次の図に示します。

図1-28 バッファ解放時のバッファプールの構造

[図データ]

バッファを解放するときは,MessageBufferクラスのReleaseMessageBufferメソッドを呼び出します。バッファを格納するバッファプールに空きがあれば,バッファはバッファプールに戻ります。バッファプールが満杯のときは,バッファはプーリングされないで破棄されます。