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
'programing' 카테고리의 다른 글
Pyodbc Connection 개체를 팬더와 함께 사용할 때 경고 표시 (0) | 2023.07.04 |
---|---|
다양한 경우에 테이블 열을 기준으로 정렬하려면 어떻게 해야 합니까(Oracle) (0) | 2023.07.04 |
R에 data.frame을 저장하는 방법은? (0) | 2023.07.04 |
하위 필드별 mongodb 쿼리 (0) | 2023.07.04 |
Float에서 XFile을 파일로 변환하는 방법 (0) | 2023.07.04 |