스트림을 시작으로 재설정해야하는 경우 (예 🙂 MemoryStream
사용하는 것이 가장 좋습니다.
stream.Seek(0, SeekOrigin.Begin);
또는
stream.Position = 0;
나는 둘 다 잘 작동하는 것을 보았지만 하나가 다른 것보다 더 정확한지 궁금해 했습니까?
답변
절대 위치를 설정할 때는 위치를 사용하고 상대 위치를 설정할 때는 찾기를 사용하십시오. 둘 다 편의상 제공되므로 코드의 스타일과 가독성에 맞는 것을 선택할 수 있습니다. 위치에 액세스하려면 스트림을 검색 할 수 있어야 안전하게 교환 할 수 있습니다.
답변
두 가지 방법에 대한 소스 코드를 보면 다음을 찾을 수 있습니다.
- 위치 속성
https://referencesource.microsoft.com/#mscorlib/system/io/memorystream.cs,320 - 검색 방법
https://referencesource.microsoft.com/#mscorlib/system/io/memorystream.cs,482
비용은 거의 동일합니다 (3 ifs 및 일부 산술). 그러나 이것은 같은 Position = 0
상대 오프셋이 아닌 절대 오프셋으로 점프하는 경우에만 해당되며 Position += 0
,이 경우 Seek가 약간 더 좋아 보입니다.
그러나 우리는 소수의 정수 산술 및 ifs 검사의 성능에 대해 이야기하고 있다는 것을 명심해야합니다. 이는 벤치마킹 방법으로는 정확하게 측정 할 수 없습니다. 다른 사람들이 이미 지적했듯이 유의미한 / 탐지 할 수있는 차이는 없습니다.