2012-11-12 61 views
2

您是否有一些解決方案,如何使對象池(內存池)的對象可以包含不同大小的數據?因此,如果我請求內存池中的某個大小的對象,它會返回一些與我的請求最接近的大小的已分配內存塊。它應該寫在C#。謝謝,因爲我真的不知道,這是什麼和最好的算法最好的收集。在C++中有一些解決方案,但C#沒有內存池。不同大小的對象的內存池 - C#

+0

這是因爲您不需要它......在C#中,內存管理由CLR處理。或者,就你而言,爲什麼你需要做顯式內存管理? –

+0

你需要什麼?如果我沒有記錯,內存池用於避免堆碎片。在C#中,垃圾回收應該處理這些事情,所以你不需要它。 – Treb

+0

是的我知道,我必須寫通信庫,它允許客戶端與服務器通信(通過特定的自己的協議),客戶端(或多個客戶端)向服務器發送數據,並且數據以消息形式(字符串)+數據不同的大小和格式)。但是這種通信可以在不中斷的情況下運行兩三個星期,因此它可以在通信期間發送數千條帶有數據的消息。我的老闆告訴我,他認爲垃圾收集對於這個目的不夠好,我應該寫內存池。但在這個領域,我沒有技能(內存塊等)。 –

回答

2

.Net Framework已經有了這樣的實現(由Windows Communication Foundation使用)。請參閱BufferManager

var buffMgr = BufferManager.CreateBufferManager(
       104857600, // use no more than 100 MB in total 
       10485760); // allocate 10 MB max to each buffer 
var buff = buffMgr.TakeBuffer(65535); // allocate a buffer enough to fit a 65 KB object 
          // note: this could return a buffer bigger than 65 KB 

//when done with the buffer: 
buffMgr.ReturnBuffer(buff); 
+0

謝謝!這似乎是我在尋找什麼 –