LIST<T>를 열거하는 가장 빠른 방법 | Gérald Barré

오늘 @Vincent 님 덕분에 List<T> 구현을 살펴볼 수 있었는데, CollectionsMarshal.AsSpan()이 되려 List<T>를 처리할 수 있었던 이유는 List<T>의 구현이 연속된 배열이기 때문입니다.

CollectionsMarshal.AsSpan()의 구현을 보면 단순히 List<T>의 내부 연속 배열을 Span<T>로 변경했음을 알 수 있습니다.

public static Span<T> AsSpan<T>(List<T>? list)
            => list is null ? default : new Span<T>(list._items, 0, list._size);

그러니 연속된 메모리만 Span<T>의 후보가 된다는 점은 변함이 없네요. ^^;

3개의 좋아요