Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El tipo StringPool implementa un grupo configurable para string instancias. Utilice este grupo para minimizar las asignaciones al crear múltiples instancias de string a partir de búferes de valores char o byte. Proporciona un mecanismo similar al string de la internación. Las principales diferencias son que el grupo es configurable, puede restablecerlo, usa una política de mejor esfuerzo y no requiere preinstanciación de string objetos. Por lo tanto, puede almacenar la asignación inicial al trabajar en un búfer temporal.
API de plataforma:StringPool
Sintaxis
El punto de entrada principal de StringPool es su GetOrAdd(ReadOnlySpan<char>) API. Esta API devuelve una string instancia que coincide con el contenido de la entrada ReadOnlySpan<char>. La API podría obtener el objeto devuelto del grupo interno.
Por ejemplo, imagina que tienes una entrada string que representa la dirección URL de una solicitud web determinada y deseas recuperar un string con solo el nombre del host. Si obtiene un gran número de solicitudes, posiblemente para un pequeño número de hosts, es posible que desee almacenar en caché esas string instancias. Para ello, use el tipo StringPool de la siguiente manera:
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);
}
El método anterior no asigna en absoluto si el solicitado string ya está presente en la memoria caché. La búsqueda utiliza simplemente un ReadOnlySpan<char> como entrada, que representa una vista en la dirección URL de entrada string.
El StringPool tipo también puede ser útil cuando se analizan las solicitudes sin procesar mediante una codificación diferente, como UTF8. Hay una GetOrAdd sobrecarga que toma una entrada ReadOnlySpan<byte> y una Encoding instancia. Esta sobrecarga usa un búfer temporal tomado prestado del grupo para recuperar un ReadOnlySpan<char> valor que se usará para la búsqueda. Este enfoque puede reducir considerablemente el número de asignaciones en función de su escenario de caso de uso específico.
Ejemplos
Encontrará más ejemplos en las pruebas unitarias.
.NET Community Toolkit