Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Platforma .NET zawiera wiele wzajemnie powiązanych typów, które reprezentują ciągły, silnie typowany region dowolnej pamięci. Te rodzaje zostały zaprojektowane tak, aby umożliwić tworzenie algorytmów, które unikają kopiowania pamięci lub alokowania na zarządzanej stercie więcej niż jest to konieczne. Tworzenie ich (za pośrednictwem Slice
, AsSpan()
, wyrażenia kolekcji lub ich konstruktorów) nie wiąże się z duplikowaniem bazowych buforów: aktualizowane są tylko odpowiednie referencje i przesunięcia, które reprezentują "widok" opakowanej pamięci. W kodzie o wysokiej wydajności zakresy są często używane, aby uniknąć niepotrzebnego przydzielania ciągów.
Typy obejmują:
System.Span<T>, typ używany do uzyskiwania dostępu do ciągłego regionu pamięci. Wystąpienie Span<T> może być podparte przez tablicę typu
T
, bufor przydzielony za pomocą instrukcji stackalloc lub wskaźnik do niezarządzanej pamięci. Ponieważ musi zostać przydzielony na stosie, ma szereg ograniczeń. Na przykład pole w klasie nie może być typu Span<T>, ani nie może być używane w operacjach asynchronicznych.System.ReadOnlySpan<T>, niezmienna wersja Span<T> struktury. Wystąpienia mogą być również wspierane przez element String.
System.Memory<T>, opakowanie dla ciągłego regionu pamięci. Wystąpienie Memory<T> może być wspierane przez tablicę typu
T
lub menedżera pamięci. Ponieważ można go przechowywać na zarządzanej stercie, Memory<T> nie ma żadnych ograniczeń, które ma Span<T>.System.ReadOnlyMemory<T>, niezmienna wersja Memory<T> struktury. Wystąpienia mogą być również wspierane przez element String.
System.Buffers.MemoryPool<T>, który przydziela silnie typizowane bloki pamięci z puli pamięci do właściciela. IMemoryOwner<T> Wystąpienia można wynająć z puli, wywołując MemoryPool<T>.Rent i zwolnić z powrotem do puli, wywołując MemoryPool<T>.Dispose().
System.Buffers.IMemoryOwner<T>, który reprezentuje właściciela bloku pamięci i kontroluje zarządzanie okresem istnienia.
MemoryManager<T>, abstrakcyjna klasa bazowa, która może służyć do zastępowania implementacji Memory<T>, dzięki czemu Memory<T> może być obsługiwana przez dodatkowe typy, takie jak bezpieczne dojścia. MemoryManager<T> jest przeznaczony dla zaawansowanych scenariuszy.
ArraySegment<T>, opakowanie dla określonej liczby elementów tablicy, zaczynając od określonego indeksu.
System.MemoryExtensions, kolekcja metod rozszerzeń do konwertowania ciągów, tablic i segmentów tablic na Memory<T> bloki.
Aby uzyskać więcej informacji, zajrzyj do przestrzeni nazw System.Buffers.
Praca z pamięcią i zakresem
Ponieważ typy związane z pamięcią i zakresem są zwykle używane do przechowywania danych w potoku przetwarzania, ważne jest, aby postępować zgodnie z zestawem najlepszych praktyk podczas używania Span<T>, Memory<T> oraz powiązanych typów. Te najlepsze rozwiązania są udokumentowane w <wytycznych dotyczących użycia pamięci T> i Span<T>.