Win32 API 日本語リファレンス
ホームSystem.WinRT.Xaml › IReferenceTrackerHost

IReferenceTrackerHost

COM
IID29a71c6a-3c42-4416-a39d-e2825a07a773継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

XAML フレームワークが使用するガベージコレクション (GC) システムに対して、グローバルなサービスを提供するインターフェースを定義します。

解説(Remarks)

このインターフェースの実装は、IReferenceTrackerManager::SetReferenceTrackerHost メソッドに渡すことで、XAML フレームワークに登録する必要があります。

メソッド 6

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT DisconnectUnusedReferenceSources(XAML_REFERENCETRACKER_DISCONNECT options)

ホストに対してガベージコレクションを実行し、不要な参照ソースをすべて削除するよう要求します。

optionsXAML_REFERENCETRACKER_DISCONNECTin0 または 1 を指定できます。1 はアプリケーションの中断 (suspend) が進行中であることを示します。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

このメソッドは参照ソースに IReferenceTracker::DisconnectFromTrackerSource を呼び出させる可能性がありますが、トラッカーソースに対して直ちに IUnknown::Release を呼び出す必要はありません。CLR ではこの呼び出しによってガベージコレクションがトリガーされますが、WaitForPendingFinalizers はトリガーされません。フラグが 1 の場合、ガベージコレクションは GCCollectionMode.Optimized の状態で実行されます。

vtbl 4 HRESULT ReleaseDisconnectedReferenceSources()

参照ソースによって切断された参照トラッカーオブジェクトに対して、ホストが IUnknown::Release を呼び出すよう要求します。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

Release の呼び出しは同一スレッドから行われる必要はありません。 この呼び出しの中で、CLR は WaitForPendingFinalizers を呼び出します。

vtbl 5 HRESULT NotifyEndOfReferenceTrackingOnThread()

呼び出し元スレッドで参照トラッキングが利用できなくなったことをホストに通知します。XAML は FrameworkView が初期化解除されたときにこれを呼び出します。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

vtbl 6 HRESULT GetTrackerTarget(IUnknown* unknown, IReferenceTrackerTarget** newReference)

参照トラッカーソースを参照する参照トラッカーターゲットを提供するようホストに要求します。このトラッカーターゲットは、その後トラッカーソースのライフタイムを制御します。

unknownIUnknown*in参照トラッカーソース。
newReferenceIReferenceTrackerTarget**out参照トラッカーターゲット。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

たとえば、このメソッドを呼び出した後にトラッカーターゲットに対して Peg を呼び出すと、トラッカーソースが回収されるのを防ぐことができます。

vtbl 7 HRESULT AddMemoryPressure(ULONGLONG bytesAllocated)

前回の通知以降にメモリ割り当てが増加したことをホストに通知します。CLR はこれを、ガベージコレクションをいつ実行するかを決定するアルゴリズムに反映するために使用します。

bytesAllocatedULONGLONGin現在割り当てられているバイト数。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

vtbl 8 HRESULT RemoveMemoryPressure(ULONGLONG bytesAllocated)

前回の通知以降にメモリ割り当てが減少したことをホストに通知します。

bytesAllocatedULONGLONGin現在割り当てられているバイト数。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

#define global IID_IReferenceTrackerHost "{29A71C6A-3C42-4416-A39D-E2825A07A773}"
#usecom global IReferenceTrackerHost IID_IReferenceTrackerHost "{}"
#comfunc global IReferenceTrackerHost_DisconnectUnusedReferenceSources      3 int
#comfunc global IReferenceTrackerHost_ReleaseDisconnectedReferenceSources   4
#comfunc global IReferenceTrackerHost_NotifyEndOfReferenceTrackingOnThread  5
#comfunc global IReferenceTrackerHost_GetTrackerTarget                      6 sptr,sptr
#comfunc global IReferenceTrackerHost_AddMemoryPressure                     7 int64
#comfunc global IReferenceTrackerHost_RemoveMemoryPressure                  8 int64
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。