>백엔드 개발 >C++ >데이터를 복사하지 않고 C#에서 효율적으로 배열 조각을 만들 수 있습니까?

데이터를 복사하지 않고 C#에서 효율적으로 배열 조각을 만들 수 있습니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-14 20:12:42310검색

How Can I Efficiently Create Array Slices in C# Without Copying Data?

C# 배열 하위 집합: 효율적으로 배열 부분 처리

단일 데이터 유형의 요소를 연속 메모리에 저장하는 C# 배열은 원본을 변경하지 않고 특정 부분을 작업해야 하는 경우가 많습니다. 이는 네트워크 통신(예: 소켓에서 설정된 바이트 수 수신)과 같이 광범위한 배열을 처리할 때 특히 관련이 있습니다. 일부 언어처럼 직접 배열 슬라이싱이 내장되어 있지는 않지만 ArraySegment<T> 매우 효율적인 솔루션을 제공합니다.

도전:

큰 바이트 배열을 상상해 보세요.

<code class="language-csharp">byte[] foo = new byte[4096];</code>

이 작업은 중복 배열이나 x 컬렉션을 생성하지 않고 초기 IEnumerable<byte> 바이트를 추출하는 것입니다.

ArraySegment<T> 솔루션:

C#은 명시적인 슬라이싱 대신 ArraySegment<T>:

을 활용합니다.
<code class="language-csharp">string[] a = { "one", "two", "three", "four", "five" };
var segment = new ArraySegment<string>(a, 1, 2);</code>

ArraySegment<T>은 데이터 중복 없이 기존 배열의 일부를 참조하는 경량 래퍼 역할을 합니다.

이해 ArraySegment<T>:

ArraySegment<T> 생성자는 세 가지 인수를 사용합니다.

  1. 소스 배열.
  2. 시작 인덱스(0부터 시작).
  3. 하위 집합의 길이.

이 예에서 segmenta 배열 내에서 "2"와 "3"을 가리킵니다.

ArraySegment<T>의 장점:

  • 메모리 최적화: 대규모 데이터 세트에 중요한 불필요한 배열 복사를 방지합니다.
  • 성능 향상: ArraySegment<T>을 통해 요소에 액세스하는 것이 새 배열을 만드는 것보다 빠릅니다.
  • LINQ 호환성: 어레이 하위 집합을 필터링하고 조작하기 위해 LINQ와 원활하게 통합됩니다.

요약:

ArraySegment<T>은 C#에서 배열 하위 집합 작업에 대한 간소화되고 효율적인 접근 방식을 제공합니다. 성능을 향상시키고 메모리 소비를 줄여 대규모 어레이 및 네트워크 작업과 관련된 시나리오에 이상적입니다.

위 내용은 데이터를 복사하지 않고 C#에서 효율적으로 배열 조각을 만들 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.