2015-01-09 7 views
0

버퍼로 스트림을 읽고이 버퍼에 여러 번 삽입하려고한다고 가정 해 보겠습니다. 이 도움을 요청할 수있는 효율적인 도우미 객체가 있습니까? 위치 100에 10 바이트 길이의 삽입을 만들고, 길이 500 바이트에 길이 20 바이트를 삽입하려면 (처음 10 바이트를 삽입 한 후 510 바이트가됩니다) 말하십시오. 내가 무엇을했는지는 여러 번 삽입 할 때 실제로 삽입 할 위치를 추적하는 것입니다 (그렇지 않으면 이미 삽입 한 주소로 모든 주소를 이동해야합니다).버퍼에 삽입하는 효율적인 방법

내 자신을 굴리기는 쉽지만 여기에 바퀴를 다시 만들고 있는지 궁금해하고 있습니다. 이것은 이미 일부 .NET 구조에 포함되어 있습니까?

+0

삽입은 일반적으로'List'와 비슷한 구조로 처리됩니다. 그 중 하나를 시도해 보셨습니까? – BradleyDotNET

답변

0

자신 만의 롤 (또는 기존 라이브러리 검색) - 바이트 복사를 최소화하기 위해 삽입을 추적하는 데 도움이되는 것은 없습니다.

바이트 배열을 사용하는 간단한 솔루 션과 각 삽입에 대한 Buffer.BlockCopy 프로파일을 사용하여 실제로 접근이 허용되지 않는지 확인하십시오. (복사 방법을 선택하려면 Array.Copy vs Buffer.BlockCopy을 확인하십시오.)

코드를 최적화하는 옵션 중 하나는 정렬 된 범위 목록을 복사하지 않고 (범위가 교차하는 경우 까다로워 질 것입니다 ...) 결과를 한 번 병합하는 것입니다.

+0

안녕하세요, 마지막 단락, 내 첫 단락의 마지막 문장에서 내가 무엇을 얻었는지 설명하고 있다고 생각합니다. Niave 방법은 모든 삽입을 일괄 처리하고 순서대로 정렬하는 대신 새로운 각 삽입에 대해 큰 copys를 계속 수행하는 것입니다. 나는 교차하는 범위에 대해 걱정할 필요가 없다. 나는 내 자신을 굴려야 할 것처럼 보이지만, 열심히해서는 안되지만, 이미 뭔가가 없었는지 확인하고 싶었다. – Prof

관련 문제