StringPool sınıfı

StringPool türü, string örnekleri için yapılandırılabilir bir havuz uygular. Birden fazla string örneği oluştururken arabellek char veya byte değerlerinin tahsislerini en aza indirmek için bu havuzu kullanın. Stajyerlik ile benzer stringbir mekanizma sağlar. Temel farklar, havuzun yapılandırılabilir olması, sıfırlanabilmesi, en iyi çaba politikası kullanması ve önceden oluşturulmuş string nesneler gerektirmemesidir. Bu nedenle, geçici arabellekler üzerinde çalışırken başlangıçta yapılan ayırmaları kaydedebilir.

Platform API'leri:StringPool

Sözdizimi

StringPool için ana giriş noktası GetOrAdd(ReadOnlySpan<char>) API'sidir. Bu API, girişinin stringiçeriğiyle eşleşen bir ReadOnlySpan<char> örnek döndürür. API, döndürülen nesneyi iç havuzdan alabilir.

Örneğin, belirli bir web isteğinin URL'sini temsil eden bir girdi string sahip olduğunuzu ve yalnızca ana bilgisayar adını elde etmek string istediğinizi düşünün. Çok sayıda istek alırsanız, büyük olasılıkla az sayıda konak için, bu string örneklerini önbelleğe almak isteyebilirsiniz. Bunu yapmak için türü aşağıdaki gibi kullanabilirsiniz StringPool :

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

İstenen string önbellekte zaten varsa, önceki yöntem hiç kaynak ayırmaz. Arama, giriş URL'sindeki görünümü temsil eden ReadOnlySpan<char>'yi giriş olarak kullanırstring.

Türü StringPool , UTF8 gibi farklı bir kodlama kullanarak ham istekleri ayrıştırdığınızda da yararlı olabilir. GetOrAdd aşırı yükleme, bir giriş ReadOnlySpan<byte> ve bir Encoding örneği alır. Bu aşırı yükleme, aramada kullanılacak bir ReadOnlySpan<char> değerini almak için havuzdan kiralanmış geçici bir arabellek kullanır. Bu yaklaşım, özel kullanım örneği senaryonuza bağlı olarak ayırma sayısını büyük ölçüde azaltabilir.

Örnekler

Birim testlerinde daha fazla örnek bulabilirsiniz.