Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Typ StringPool implementuje konfigurovatelný fond pro string instance. Tento fond použijte k minimalizaci přidělení při vytváření více instancí string z vyrovnávacích pamětí hodnot char nebo byte. Poskytuje mechanismus, který je trochu podobný string interningu. Hlavní rozdíly jsou v tom, že fond je konfigurovatelný, můžete ho resetovat, používá nejlepší možnou politiku a nevyžaduje předchozí instanci string objektů. Proto může při práci na dočasných vyrovnávacích pamětích uložit počáteční přidělení.
Rozhraní API platformy:StringPool
Syntaxe
Hlavním vstupním bodem StringPool je jeho GetOrAdd(ReadOnlySpan<char>) rozhraní API. Toto rozhraní API vrátí string instanci, která odpovídá obsahu vstupu ReadOnlySpan<char>. Rozhraní API může získat vrácený objekt z interního poolu.
Představte si například, že máte vstup string , který představuje adresu URL daného webového požadavku a chcete načíst string pouze název hostitele. Pokud získáte velký počet požadavků, pravděpodobně pro malý počet hostitelů, můžete chtít tyto string instance uložit do mezipaměti. Můžete to provést pomocí následujícího StringPool typu:
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);
}
Předchozí metoda vůbec nepřiděluje, jestliže požadovaný string již je v mezipaměti. Vyhledávání používá jako vstup jen ReadOnlySpan<char>, který představuje pohled na vstupní adresu URL string.
Tento StringPool typ může být užitečný také při analýze nezpracovaných požadavků pomocí jiného kódování, například UTF8. Existuje přetížení, které přebírá vstup ReadOnlySpan<byte> a instanci Encoding. Toto přetížení využívá dočasnou vyrovnávací paměť pronajatou z fondu pro načtení hodnoty ReadOnlySpan<char>, která se použije pro vyhledávání. Tento přístup může výrazně snížit počet přidělení v závislosti na konkrétním scénáři použití.
Příklady
Další příklady najdete v jednotkových testech.
.NET Community Toolkit