IDXGIDevice3::Trim メソッド (dxgi1_3.h)
アプリの代わりに IDXGIDevice3 DXGI デバイスによって割り当てられたグラフィックス メモリをトリミングします。
DirectX を使用してレンダリングするアプリの場合、グラフィックス ドライバーは、後続のレンダリング要求を高速化するために、内部メモリ バッファーを定期的に割り当てます。 これらのメモリ割り当ては、PLM に対するアプリのメモリ使用量に対してカウントされ、一般にシステム全体のメモリ使用量が増加します。
Windows 8.1以降、Direct2D または Direct3D (CoreWindow や XAML 相互運用を含む) でレンダリングするアプリは、PLM の中断コールバックに応答して Trim を呼び出す必要があります。 Direct3D ランタイムとグラフィックス ドライバーは、アプリに割り当てられた内部メモリ バッファーを破棄し、メモリ占有領域を減らします。
このメソッドを呼び出しても、グラフィックス デバイスのレンダリング状態は変更されず、レンダリング操作には影響しません。 Trim 呼び出し後の最初のレンダリング操作中に内部バッファーが再割り当てされると、パフォーマンスに短いヒットが発生するため、アプリは一定期間アイドル状態になったときにのみ Trim を呼び出す必要があります (たとえば、PLM の中断に応じて)。
アプリは、アイドル状態になる前に最後に実行された D3D 操作の 1 つとして Trim を呼び出すようにする必要があります。 Direct3D は通常、D3D オブジェクトの破棄を延期します。 ただし、 Trim を呼び出すと、Direct3D によってオブジェクトが直ちに破棄されます。 このため、 Trim を呼び出した後に Direct3D オブジェクトの最後の参照を解放すると、オブジェクトが破棄され、アプリが中断する前にメモリが割り当て解除される保証はありません。
ID3D11DeviceContext::Flush と同様に、アプリは Trim を呼び出す前に ID3D11DeviceContext::ClearState を呼び出す必要があります。 ClearState は Direct3D パイプライン バインドをクリアし、リリースしようとしている Direct3D オブジェクトへの参照が Direct3D に保持されないようにします。
また、 Trim を呼び出す前にミドルウェアの参照を解放することも賢明です。そのミドルウェアでは、Direct3D オブジェクトへの参照を解放する必要がある場合もあります。
構文
void Trim();
戻り値
なし
要件
サポートされている最小のクライアント | Windows 8.1 [デスクトップ アプリ |UWP アプリ] |
サポートされている最小のサーバー | Windows Server 2012 R2 [デスクトップ アプリ |UWP アプリ] |
対象プラットフォーム | Windows |
ヘッダー | dxgi1_3.h |
Library | Dxgi.lib |