Criação e otimizações do GUID
Como um CLSID, como um IID (identificador de interface), é um GUID, nenhuma outra classe, independentemente de quem a grava, tem um CLSID duplicado. Os implementadores de servidor geralmente obtêm CLSIDs por meio da função CoCreateGuid. Essa função é garantida para produzir CLSIDs exclusivos, de modo que os implementadores de servidor em todo o mundo possam desenvolver e implantar seus softwares de forma independente sem medo de colisão acidental com software escrito por outras pessoas.
O uso de CLSIDs exclusivos evita a possibilidade de colisões de nome entre classes porque clsids não estão de forma alguma conectados aos nomes usados na implementação subjacente. Por exemplo, dois fornecedores diferentes podem escrever classes chamadas "StackClass", mas cada um deles teria um CLSID exclusivo e, portanto, não poderia ser confundido.
COM frequentemente deve mapear GUIDs (IIDs e CLSIDs) para algum conjunto arbitrariamente grande de outros valores. Como desenvolvedor de aplicativos, você pode ajudar a acelerar essas pesquisas e, assim, melhorar o desempenho do sistema, gerando os GUIDs para seu aplicativo como um bloco de valores consecutivos.
A maneira mais eficiente de gerar um bloco de GUIDs consecutivos é executar o utilitário uuidgen usando os comutadores -n e -x, que gera um bloco de UUIDs, cada um cujo primeiro valor DWORD é incrementado por um.
Por exemplo, se você digitasse
uuidgen -n5 -x
o utilitário uuidgen geraria um bloco de UUIDs semelhante ao seguinte:
12340001-4980-1920-6788-123456789012
12340002-4980-1920-6788-123456789012
12340003-4980-1920-6788-123456789012
12340004-4980-1920-6788-123456789012
12340005-4980-1920-6788-123456789012
Um método para gerar e rastrear GUIDs para um projeto inteiro começa com a geração de um bloco de um número arbitrariamente grande de UUIDs, digamos 500. Por exemplo, se você digitasse
-n500 -x > guids.txt uuidgen
o utilitário geraria 500 UUIDs consecutivos e os gravaria no arquivo de texto especificado. Em seguida, você pode verificar esse arquivo em sua árvore de origem, fornecendo um único repositório para que todos os GUIDs sejam usados em um projeto. Como as pessoas exigem GUIDs para suas partes do projeto, elas podem fazer check-out do arquivo, tomar quantos GUIDs precisarem, marcando-os como tomados e deixando uma nota sobre onde no código ou "especificação" eles estão usando-os.
Além de melhorar o desempenho do sistema, a geração de blocos de GUIDs consecutivos dessa forma tem os seguintes benefícios:
- Um arquivo central que contém todos os GUIDs de um aplicativo facilita o controle de quais GUIDs são para o que e quais pessoas estão usando.
- Um bloco de GUIDs consecutivos associados a um aplicativo específico ajuda desenvolvedores e testadores a reconhecer GUIDs internos durante a depuração e facilita encontrá-los no registro do sistema porque eles são armazenados sequencialmente.
Tópicos relacionados