Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Jenis StringPool mengimplementasikan kumpulan yang dapat dikonfigurasi untuk string instans. Ini dapat digunakan untuk meminimalkan alokasi saat membuat beberapa string instans dari buffer char atau byte nilai. Ini menyediakan mekanisme yang agak mirip dengan string interning, dengan perbedaan utama adalah bahwa kumpulan dapat dikonfigurasi, dapat diatur ulang, diimplementasikan dengan kebijakan upaya terbaik dan tidak perlu melakukan pra-instans string objek, sehingga dapat menyimpan alokasi awal juga ketika bekerja pada buffer sementara.
API Platform: StringPool
Sintaks
Titik masuk utama untuk StringPool adalah API-nya GetOrAdd(ReadOnlySpan<char>) , yang mengembalikan instans yang string cocok dengan konten input ReadOnlySpan<char>, mungkin mendapatkan objek yang dikembalikan dari kumpulan internal.
Sebagai contoh, bayangkan kami memiliki input string yang mewakili URL permintaan web tertentu, dan kami ingin juga mengambil string hanya dengan nama host. Jika kita mendapatkan sejumlah besar permintaan mungkin untuk sejumlah kecil host, kita mungkin ingin menyimpan instans tersebut string , kita dapat melakukannya dengan menggunakan StringPool jenis sebagai berikut:
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);
}
Metode di atas tidak melakukan alokasi sama sekali jika yang diminta string sudah ada di cache, karena pencarian dilakukan hanya ReadOnlySpan<char> dengan sebagai input, mewakili tampilan pada URL stringinput .
Jenis ini StringPool juga dapat berguna saat mengurai permintaan mentah menggunakan pengodean yang berbeda, misalnya UTF8. Ada GetOrAdd kelebihan beban yang mengambil input ReadOnlySpan<byte> dan Encoding instans, yang menggunakan buffer sementara yang disewa dari kumpulan untuk mengambil nilai yang ReadOnlySpan<char> akan digunakan untuk pencarian. Ini lagi-lagi dapat sangat mengurangi jumlah alokasi tergantung pada skenario kasus penggunaan tertentu.
Contoh
Anda dapat menemukan lebih banyak contoh dalam pengujian unit.
.NET Community Toolkit