2010-09-01 12 views
1

是否有一類不是將寫入的數據複製到偶爾調整大小的內部數組中(如MemoryStream所做的那樣),而是保留對用戶在寫入時傳入的每個緩衝區的引用,並維護一個數據結構跟蹤寫入的每個緩衝區和偏移量/計數?它還應該支持一種讀取機制,它將爲客戶端提供緩衝區,偏移量和計數(而不是要求客戶端分配並提供一個緩衝區,以便每次讀取時都將數據複製到該緩衝區中)。在MemoryStream以外的C#中是否存在無副本緩衝區/流?

本質上我需要通過引用保留數據,並且不會在我背後做任何重要的分配或任何數據複製。出於某種原因,我懷疑BCL提供了這一點。任何已知的實現?

+0

您是否在尋找性能改進?你需要多少改進? – 2010-09-01 00:09:28

+0

如果您擔心要調整大小,可以使用具有容量的MemoryStream構造函數:http://msdn.microsoft.com/en-us/library/bx3c0489.aspx – SwDevMan81 2010-09-01 00:11:53

+0

這是在服務器應用程序中 - 系統將數據從內核複製到用戶空間,然後複製到託管內存中,並希望能夠方便地在託管代碼中傳遞它,而無需將其複製到託管代碼中。 – bvanderveen 2010-09-01 00:15:57

回答

1

會一

List<ArraySegment<byte>> 

嗎?

+0

這很方便;我不知道ArraySegment結構。這不是我想要的完整實現,但絕對是朝着正確方向邁出的一步。 – bvanderveen 2010-09-01 00:28:52

+0

ArraySegment <>不存儲任何內容。 – 2010-09-01 00:54:09

+0

我越想它,我不確定我所要求的正是我想要的。但無論結果如何,它都會涉及到ArraySegment。謝謝。 – bvanderveen 2010-09-01 00:54:22