[英]C# simple way to do file I/O with big multidimensional (non-jagged) array of bytes
我正在使用大型多維字節數組(每個數組大約500mb,比如一個維度為[8,8192,8192]的數組),我想將它們讀入並寫入文件進行存儲。
我嘗試使用BinaryFormatter,但速度很慢(需要幾分鍾才能完成)。
我嘗試使用BinaryWriter,但它只需要一個單維數組。 現在,在C中,將多維數組作為單維傳遞沒有問題。 在C#中,從我看到的,我有兩個選擇:
顯然,如果我只使用byte []到處而不是使用myarray [i,j]使用myarray [i + j * myarray_width]會更快,但這需要重寫整個類只是為了更容易的工作一組I / O功能(保存/加載)。
必須有一個更好的方法。
在快速序列化方面,不安全的代碼可能派上用場。 有兩種技術可以幫到這里:
byte[,]
到你可以傳遞給FileStream.Write
的新byte[]
做一個memcpy。 當然,這需要臨時加倍存儲空間和一些復制。 但是,您可以將此工作拆分為64KB塊。 WriteFile
並傳遞FileStream.SafeHandle
值。 WriteFile
采用任意指針,因此您可以直接寫出您的byte[,]
(轉換為void*
)。 選項2最快(“零復制”)。
旁注:每當您需要重新解釋字節時,不安全的代碼就派上用場了。 這種能力導致C中的一些很好的抽象。幸運的是,C#也有這種能力。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.