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. To se dá použít k minimalizaci přidělení při vytváření více string instancí z vyrovnávací paměti char nebo byte hodnot. Poskytuje mechanismus, který je trochu podobný string prokládání, s hlavními rozdíly v tom, že fond je konfigurovatelný, lze resetovat, je implementován se zásadami nejlepšího úsilí a nevyžaduje vytvoření string instance objektů, takže může uložit počáteční přidělení i při práci na dočasných vyrovnávacích pamětích.
Rozhraní API platformy: StringPool
Syntaxe
Hlavním vstupním bodem pro StringPool je jeho GetOrAdd(ReadOnlySpan<char>) rozhraní API, které vrací string instanci odpovídající obsahu vstupu ReadOnlySpan<char>, pravděpodobně získání vráceného objektu z interního fondu.
Představte si například, že máme vstup string představující adresu URL daného webového požadavku a chceme také načíst string pouze název hostitele. Pokud získáme velký počet požadavků na malý počet hostitelů, můžeme tyto instance uložit do mezipaměti string , můžeme to udělat následujícím StringPool způsobem:
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);
}
Výše uvedená metoda vůbec nepřiděluje žádné přidělení, pokud je požadovaná string již v mezipaměti, protože vyhledávání se provádí stejně ReadOnlySpan<char> jako vstup, který představuje zobrazení na vstupní adrese URL string.
Typ StringPool může být také užitečný při analýze nezpracovaných požadavků pomocí jiného kódování, například UTF8. GetOrAdd Existuje přetížení, které přebírá vstup ReadOnlySpan<byte> a Encoding instanci, která používá dočasnou vyrovnávací paměť pronajmutou z fondu k načtení ReadOnlySpan<char> hodnoty, která se má použít pro vyhledávání. To 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
.NET Community Toolkit