簡體   English   中英

c#MemoryStream與字節數組

[英]c# MemoryStream vs Byte Array

我有一個函數,該函數生成並返回MemoryStream。 生成后,MemoryStream的大小是固定的,我不再需要對其進行寫入,只需要輸出即可。 例如,寫入MailAttachment或寫入數據庫。

處理物體的最佳方法是什么? MemoryStream或字節數組? 如果我使用MemoryStream,則必須在讀取后重置位置。

如果必須將所有數據保存在內存中,那么從許多方面來說,選擇都是任意的。 如果您有現有的上操作Stream ,然后MemoryStream可能是更方便,但如果你返回一個byte[]你可以隨時只是包裝,在一個new MemoryStream(blob) 反正

這可能還取決於它的大小以及持有的時間。 MemoryStream可以過 ,這有其優點和缺點。 如果您將數據保留一會兒,則將其強制為byte[]可能會很有用,因為它將清除掉所有多余的數據。 但是,如果只是短暫保留它,則可能會適得其反,因為它會迫使您在創建新副本時重復大部分(絕對最小值:一半)數據。

所以; 這在很大程度上取決於上下文,用法和意圖。 在大多數情況下,“無論哪種方法,都應明確,簡單”即可。 如果數據特別大或保存了很長時間,則可能需要故意進行一些調整。

byte[]方法的另一優點:如果需要,多個線程可以一次(只要它們正在讀取)安全地訪問它MemoryStream並非如此。 但是,這可能是一個錯誤的優勢:大多數代碼不需要從多個線程訪問byte[]

MemoryStream類用於將元素添加到流中。 有一個文件指針; 它模擬隨機訪問,取決於它的實現方式。 因此,MemoryStream不能隨時訪問任何項目。

字節數組允許在任何時間隨意訪問任何元素,直到未分配它為止。

在字節[]之后,MemoryStream駐留在內存中(取決於類的名稱)。 然后,最大分配大小為4 GB。

最后,如果需要以任何索引號訪問數據,請使用字節[]。 否則,MemoryStream設計為與其他需要字符串作為輸入的流一起使用。

使用byte []是因為它是一個固定大小的對象,它使內存分配和清理更加容易,並且相對而言沒有開銷-尤其是因為您不需要使用MemoryStream的功能。 此外,您還希望盡快處理該流,以便可以釋放它可能正在使用的可能的非托管資源。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM