關於Steam的CopyFrom操作

       在對流的操作的時候 如果不設置Size,那麼在CopyFrom的時候,MemoryStream首先從源Stream讀取一個Buf(假設它的長度是32K,這是假設,用來說明問題的,具體Buf的長度參看源碼),然後把這個Buf寫入MemoryStream(既調用MemoryStream.Write方法),在寫入的過程中,MemoryStream分配一個Buf長度的內存(32K),然後把數據寫進去,接着又從源Stream讀取第二個Buf的數據,然後再用MemoryStream.Write的時候,MemoryStream會首先分配一個64K的內存塊,然後把前面第一個Buf(即前32k數據)Move到這個新塊內,然後再在這個塊的後半部分寫入新送入的Buf的數據…如此循環下去,數據越多,重複分配重複複製數據的操作就會越來越花費時間,於是拷貝數據的時間成幾何方式增長下去了如果首先設置了Size的大小,那麼內存只需要經過一次申請空間的操作,接下來就是直接把從源Stream讀取的Buf數據Move到這一塊內存塊的不同位置而已了.這樣可加快流的Copy的速度.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章