共用方式為


分析 API 中由呼叫端配置的緩衝區

更新:2007 年 11 月

接收由呼叫端配置之緩衝區的 ICorProfilerInfo 方法一般符合下列簽章。

HRESULT GetBuffer
(
    [in]  /* Some query information (for example, a name).*/,
    [in]  ULONG32 cBufferSizeStart,
    [out] ULONG32 *pcBufferMax,
    [out] /* TYPE */ InfoBuffer[] 
);

這些方法一定以下列方式運作:

  • cBufferSizeStart 參數會指定緩衝區中配置的元素數目。這個值表示由這個方法的呼叫端所配置的緩衝區大小。

  • pcBufferMax 參數設定為可用元素的總數。在方法傳回之後,pcBufferMax 會設定為可傳回元素的最大數目,而非實際傳回的元素數目。因此,pcBufferMax 與由呼叫端配置之緩衝區的實際大小無關。

  • InfoBuffer 參數會指定由呼叫端配置的緩衝區。它是由這個方法的呼叫端建立的。它的大小是由 cBufferSizeStart 指定的。在方法傳回之後,這個緩衝區會盡可能多填入些元素。可用元素可能多於緩衝區的容量。如果 InfoBuffer 為 null,cBufferSizeStart 必須是 0。如果傳回任何元素,方法會傳回 S_OK,並會將 pcBufferMax 設定為可用元素的總數。

備註

有兩個方法可使用由呼叫端配置的緩衝區:

  • 單一行程方法:配置預期夠大、足以包含所有傳回元素的緩衝區。如果緩衝區證實太小,要準備重新配置它。否則,可能會發生資料截斷。

  • 雙重行程方法:或者,呼叫方法兩次。先使用長度為零的 InfoBuffer 參數來呼叫,以取得正確的緩衝區大小。接著,將緩衝區大小設定為 pcBufferMax 中傳回的值,並再次呼叫函式。

第一個方法比較快,並且避免動態配置。不過,如果緩衝區不夠大,無法包含資訊,您必須重新配置它。

第二個方法比較慢,因為它涉及到兩個呼叫和動態配置。例如,假設針對應用程式定義域名稱,要求查詢資訊。這個方法傳回之後,您必須驗證 InfoBuffer 夠大,足以包含應用程式定義域的完整名稱。若要完成這項工作,請比較 pcBufferMax 所指向的值與 cBufferSizeStart 參數的值。如果 pcBufferMax 指向大於 cBufferSizeStart 的值,請配置較大的 InfoBuffer 緩衝區,以較大的大小來更新 cBufferSizeStart,然後重新呼叫方法。

請參閱

其他資源

分析 API 的通用功能

分析概觀

分析 (Unmanaged API 參考)