Delen via


StringPool-klasse

Het type StringPool implementeert een configureerbare pool voor string exemplaren. Gebruik deze pool om toewijzingen te minimaliseren wanneer u meerdere string exemplaren maakt uit buffers met char- of byte-waarden. Het biedt een mechanisme dat enigszins vergelijkbaar is met string interneren. De belangrijkste verschillen zijn dat de pool configureerbaar is, u kunt deze opnieuw instellen, er wordt gebruikgemaakt van een beleid voor best effort en er zijn geen voorinstantiatieobjecten string vereist. Hierdoor kunnen de initiƫle toewijzingen worden opgeslagen bij het werken aan tijdelijke buffers.

Platform-API's:StringPool

Syntaxis

Het belangrijkste ingangspunt voor StringPool is de GetOrAdd(ReadOnlySpan<char>) API. Deze API retourneert een string exemplaar dat overeenkomt met de inhoud van de invoer ReadOnlySpan<char>. De API kan het geretourneerde object ophalen uit de interne pool.

Stel dat u een invoer string hebt die de URL van een bepaalde webaanvraag vertegenwoordigt en u een string met alleen de hostnaam wilt ophalen. Als u een groot aantal aanvragen krijgt, mogelijk voor een klein aantal hosts, kunt u deze string exemplaren in de cache opslaan. U kunt dit doen door het StringPool type als volgt te gebruiken:

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);
}

De voorgaande methode wijst helemaal niets toe als de aangevraagde string al in de cache aanwezig is. De zoekactie maakt gebruik van een ReadOnlySpan<char> als invoer, die een weergave van de invoer-URL stringvertegenwoordigt.

Het StringPool type kan ook nuttig zijn wanneer u onbewerkte aanvragen parseert met behulp van een andere codering, zoals UTF8. Er is een GetOrAdd overbelasting die een invoer ReadOnlySpan<byte> en een Encoding exemplaar accepteert. Deze overbelasting maakt gebruik van een tijdelijke buffer die uit de pool wordt gehuurd om een ReadOnlySpan<char> waarde op te halen die voor de zoekactie moet worden gebruikt. Deze aanpak kan het aantal toewijzingen aanzienlijk verminderen, afhankelijk van uw specifieke gebruiksscenario.

Examples

Meer voorbeelden vindt u in de eenheidstests.