Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O tipo StringPool implementa um pool configurável para instâncias de string. Use esse pool para minimizar as alocações ao criar várias instâncias de string a partir de buffers de char ou de byte valores. Ele fornece um mecanismo que é um pouco semelhante ao string internamento. As principais diferenças são que o pool é configurável, você pode redefini-lo, ele usa uma política de melhor-esforço e não requer a pré-instanciação de objetos string. Portanto, pode-se guardar as alocações iniciais ao trabalhar em buffers temporários.
APIs de plataforma:StringPool
Sintaxe
O ponto de entrada principal para StringPool é a API GetOrAdd(ReadOnlySpan<char>). Essa API retorna uma string instância que corresponde ao conteúdo da entrada ReadOnlySpan<char>. A API pode obter o objeto retornado do pool interno.
Por exemplo, imagine que você tenha uma entrada string que represente a URL de uma determinada solicitação da Web e queira recuperar uma string com apenas o nome do host. Se você receber um grande número de solicitações, possivelmente para um pequeno número de hosts, talvez queira armazenar essas instâncias em cache string. Você pode fazer isso usando o tipo StringPool da seguinte maneira:
public static string GetHost(string url)
{
// We assume the input might start either with eg. https:// (or other prefix),
// or directly with the host name. Furthermore, we also assume that the input
// URL will always have a '/' character right after the host name.
// For instance: "https://learn.microsoft.com/dotnet/api/system.string.intern".
int
prefixOffset = url.AsSpan().IndexOf(stackalloc char[] { ':', '/', '/' }),
startIndex = prefixOffset == -1 ? 0 : prefixOffset + 3,
endIndex = url.AsSpan(startIndex).IndexOf('/');
// In this example, it would be "learn.microsoft.com"
ReadOnlySpan<char> span = url.AsSpan(startIndex, endIndex);
return StringPool.Shared.GetOrAdd(span);
}
O método anterior não alocará nada se o solicitado string já estiver presente no cache. A pesquisa usa apenas um ReadOnlySpan<char> como entrada, que representa uma visualização na URL de entrada string.
O StringPool tipo também pode ser útil quando você analisa solicitações brutas usando uma codificação diferente, como UTF8. Há uma GetOrAdd sobrecarga que utiliza uma instância ReadOnlySpan<byte> como entrada e uma instância Encoding. Essa sobrecarga usa um buffer temporário alugado do pool para recuperar um ReadOnlySpan<char> valor a ser usado para a pesquisa. Essa abordagem pode reduzir consideravelmente o número de alocações dependendo do cenário específico do caso de uso.
Exemplos
Você pode encontrar mais exemplos nos testes de unidade.
.NET Community Toolkit