Buffers alocados chamador da API de criação de perfil
ICorProfilerInfo métodos que levam os buffers alocados chamador normalmente está de acordo com a assinatura a seguir.
HRESULT GetBuffer
(
[in] /* Some query information (for example, a name).*/,
[in] ULONG32 cBufferSizeStart,
[out] ULONG32 *pcBufferMax,
[out] /* TYPE */ InfoBuffer[]
);
Esses métodos se comportam sempre sistema autônomo segue:
The cBufferSizeStart parâmetro especifica o número de elementos alocado em buffer. Esse valor representa o dimensionar do buffer, que é alocado pelo chamador desse método.
The pcBufferMax o parâmetro é conjunto para o número total de elementos disponível. Depois que o método retorna, pcBufferMax é conjunto o número máximo de elementos que poderiam foram retornados em vez do número de elementos que foram realmente retornadas. So, pcBufferMax é independente do dimensionar real do buffer alocado chamador.
The InfoBuffer parâmetro especifica o buffer alocado chamador. Ele é criado pelo chamador desse método. Seu dimensionar é especificado por cBufferSizeStart. Depois que o método retorna, esse buffer será preenchido com tantos elementos possível. Pode haver mais elementos disponível do que será ajuste no buffer. If InfoBuffer for nulo, cBufferSizeStart deve ser 0. Se todos os elementos forem retornados, o método retorna S_OK e define pcBufferMax o número total de elementos disponível.
Comentários
Há duas maneiras de trabalhar com buffers alocados chamador:
Passagens método: Alocar um buffer que você espera será ser grande o suficiente para conter todos os elementos retornados. Esteja preparado para realocar o buffer se ele é muito pequeno. Caso contrário, o truncamento de dados pode ocorrer.
Método de duas passagens: Como alternativa, telefonar o método duas vezes. Primeira telefonar com um comprimento zero InfoBuffer parâmetro para obter o correto dimensionar do buffer. Em seguida, defina o dimensionar do buffer como o valor retornado em pcBufferMax e chame a função novamente.
O primeiro método é mais rápido e evita a alocação dinâmica. No entanto, talvez seja necessário realocar o buffer se não for grande o suficiente para conter as informações.
O segundo método é mais lento porque envolve duas chamadas e a alocação dinâmica. Por exemplo, vamos suponha que as informações de consulta solicitada foram para o nome de um domínio aplicativo. Após esse método retorna, você deve verificar que InfoBuffer era grande o suficiente para conter o nome completo do domínio do aplicativo. Para fazer isso, comparar o valor que pcBufferMax aponta para com o valor das cBufferSizeStart parâmetro. If pcBufferMax aponta para um valor que seja maior que cBufferSizeStart, alocar uma maior InfoBuffer buffer, atualização cBufferSizeStart com o dimensionar maior, novo e novamente o método de telefonar.
Consulte também
Outros recursos
Recursos comuns da API de criação de perfil