Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
O tipo StringPool implementa um pool configurável para string. Use este pool para minimizar alocações quando criar múltiplas instâncias de string a partir de buffers de valores de char ou byte. Proporciona um mecanismo algo semelhante ao string internamento. As principais diferenças são que o pool é configurável, pode reiniciá-lo, usa uma política de melhor esforço e não requer pré-instanciação string de objetos. Assim, é possível salvar as alocações iniciais ao trabalhar com buffers temporários.
APIs da Plataforma:StringPool
Sintaxe
O principal ponto de entrada para StringPool é a sua API GetOrAdd(ReadOnlySpan<char>). Esta API devolve uma string instância que corresponde ao conteúdo da entrada ReadOnlySpan<char>. A API pode obter o objeto devolvido do pool interno.
Por exemplo, imagine que tem uma entrada string que representa a URL de um determinado pedido web, e quer recuperar um string apenas com o nome do host. Se receber um grande número de pedidos, possivelmente para um pequeno número de hosts, pode querer armazenar essas string instâncias em cache. Pode fazê-lo usando o StringPool tipo da seguinte forma:
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 aloca nada se o pedido string já estiver presente na cache. A consulta usa apenas ReadOnlySpan<char> como entrada, que representa uma visualização da URL string de entrada.
O StringPool tipo também pode ser útil quando analisa pedidos brutos usando uma codificação diferente, como UTF8. Há uma GetOrAdd sobrecarga que requer uma entrada ReadOnlySpan<byte> e uma Encoding instância. Esta sobrecarga utiliza um buffer temporário obtido do pool para recuperar um valor ReadOnlySpan<char> a usar na consulta. Esta abordagem pode reduzir significativamente o número de alocações, dependendo do seu caso de uso específico.
Exemplos
Podes encontrar mais exemplos nos testes unitários.
.NET Community Toolkit