Compartir a través de


Búferes asignados por el llamador en la API de generación de perfiles

Actualización: noviembre 2007

Los métodos ICorProfilerInfo que admiten búferes asignados por el llamador se ajustan generalmente a la firma siguiente.

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

Estos métodos siempre se comportan de la manera siguiente:

  • El parámetro cBufferSizeStart especifica el número de elementos asignado en el búfer. Este valor representa el tamaño del búfer, que es asignado por el llamador de este método.

  • El parámetro pcBufferMax está establecido en el número total de elementos disponibles. Una vez que el método vuelve, pcBufferMax está establecido en el número máximo de elementos que se pudieron devolver en lugar del número de elementos que realmente se devolvieron. En consecuencia, pcBufferMax es independiente del tamaño real del búfer asignado por el llamador.

  • El parámetro InfoBuffer especifica el búfer asignado por el llamador. Lo crea el llamador de este método. cBufferSizeStart especifica su tamaño. Una vez que el método vuelve, este búfer se habrá llenado con tantos elementos como sea posible. Puede haber más elementos disponibles que los que caben en el búfer. Si InfoBuffer es null, cBufferSizeStart debe ser 0. Si se devuelve algún elemento, el método devuelve S_OK y establece pcBufferMax en el número total de elementos disponibles.

Comentarios

Hay dos maneras de trabajar con búferes asignados por el llamador:

  • Método de paso único: asigne un búfer que espere que sea lo bastante grande como para contener todos los elementos devueltos. Prepárese para reasignar el búfer si resulta ser demasiado pequeño. De lo contrario, los datos pueden truncarse.

  • Método de doble paso: como alternativa, llame al método dos veces. En primer lugar, llame con un parámetro InfoBuffer de longitud cero para obtener el tamaño de búfer correcto. A continuación, establezca el tamaño del búfer en el valor devuelto en pcBufferMax y llame de nuevo a la función.

El primer método es más rápido y evita la asignación dinámica. No obstante, es posible que necesite reasignar el búfer si no es lo bastante grande para contener la información.

El segundo método es más lento porque implica dos llamadas y asignación dinámica. Por ejemplo, supongamos que la información de la consulta solicitada fue para el nombre de un dominio de aplicación. Cuando vuelva este método, debe comprobar que el búfer InfoBuffer fuera lo bastante grande para contener el nombre completo del dominio de aplicación. Para ello, compare el valor al que señala pcBufferMax con el valor del parámetro cBufferSizeStart. Si pcBufferMax señala a un valor mayor que cBufferSizeStart, asigne un búfer de InfoBuffer mayor, actualice cBufferSizeStart con el nuevo tamaño y llame de nuevo al método.

Vea también

Otros recursos

Características comunes en la API de generación de perfiles

Información general sobre la generación de perfiles

Generación de perfiles (Referencia de la API no administrada)