programing

c# 메모리 스트림 대 바이트 어레이

yellowcard 2023. 7. 4. 21:49
반응형

c# 메모리 스트림 대 바이트 어레이

메모리 스트림을 생성하고 반환하는 기능이 있습니다.MemoryStream의 크기가 고정된 후에는 더 이상 쓸 필요가 없습니다. 출력만 필요합니다.예를 들어 메일 첨부 파일에 쓰거나 데이터베이스에 씁니다.

물건을 전달하는 가장 좋은 방법은 무엇입니까?메모리 스트림 또는 바이트 배열?MemoryStream을 사용하는 경우 읽기 후 위치를 재설정해야 합니다.

모든 데이터를 메모리에 저장해야 하는 경우 여러 가지 방법으로 선택할 수 있습니다.에서 작동하는 기존 코드가 있다면,MemoryStream더 편리할 수도 있지만, 만약 당신이 반품한다면.byte[]당신은 항상 그것을 그냥 포장할 수 있습니다.new MemoryStream(blob) 어쨌든

또한 크기와 보관 기간에 따라 달라질 수 있습니다.MemoryStream크기가 초과될 수 있으며, 이는 장점과 단점을 가지고 있습니다.강제 실행byte[]데이터를 잠시 보관하는 경우 과도한 데이터가 제거되기 때문에 유용할 수 있지만, 잠시 보관하는 경우에는 새 복사본을 생성하는 동안 데이터의 대부분(절대 최소: 절반)을 복제해야 하므로 생산성이 떨어질 수 있습니다.

상황, 사용법, 의도에 따라 크게 달라집니다.대부분의 시나리오에서 "어느 것이든 효과가 있고 명확하고 단순한" 것으로 충분할 수 있습니다.데이터가 특히 크거나 장기간 보관된 경우에는 의도적으로 데이터를 약간 조정할 수 있습니다.

한 가지 추가적인 이점은byte[]접근 방식: 필요한 경우, 여러 스레드가 한 번에 안전하게 액세스할 수 있습니다(읽는 동안). - 이것은 사실이 아닙니다.MemoryStream그러나, 그것은 잘못된 이점일 수 있습니다: 대부분의 코드는 액세스할 필요가 없습니다.byte[]여러 스레드에서.

MemoryStream 클래스는 스트림에 요소를 추가하는 데 사용됩니다.파일 포인터가 있습니다. 랜덤 액세스를 시뮬레이션합니다. 구현 방법에 따라 다릅니다.따라서 MemoryStream은 언제든지 항목에 액세스할 수 있도록 설계되지 않았습니다.

바이트 배열은 할당이 해제될 때까지 언제든지 임의의 요소에 액세스할 수 있습니다.

[바이트] 옆에 있는 MemoryStream은 클래스 이름에 따라 메모리에 저장됩니다.그러면 최대 할당 크기는 4GB입니다.

마지막으로 인덱스 번호에 상관없이 데이터에 액세스해야 하는 경우 바이트 []를 사용합니다.그렇지 않으면 MemoryStream은 문자열만 있는 동안 스트림을 입력해야 하는 다른 항목과 함께 작동하도록 설계되었습니다.

바이트[]는 메모리 할당 및 정리를 용이하게 하는 고정 크기의 개체이므로 특히 메모리 스트림의 기능을 사용할 필요가 없으므로 오버헤드가 상대적으로 없습니다.또한 사용 중인 관리되지 않는 리소스를 해제할 수 있도록 해당 스트림을 최대한 빨리 삭제할 수 있습니다.

언급URL : https://stackoverflow.com/questions/11828599/c-sharp-memorystream-vs-byte-array

반응형