我們的應用程序是基於客戶端 - 服務器的應用程序,我已經從.NET Remoting轉換爲ZMQ。我們有兩種情況,一個大型圖像對象被轉換爲一個字節數組以便序列化併發送到客戶端。爲了減少內存問題(大對象堆),我們有一個用於這個過程的字節數組池,因此不需要經常分配和釋放它們。如何在RMI調用中釋放服務器端資源?
我遇到的問題是,我不知道如何在RMI類似的調用中返回數組後,將字節數組標記爲「free」。
public byte[] GetImageAreaGrey(int imageId)
{
var image = FindImageById(imageId);
byte[] byteHolder = BytePool.GetFreeArray();
ByteConverter.ConvertImageToBytes(image, byteHolder)
return byteHolder ; // byteHolder will be serialized in the communications code using JSON.NET
// How do I return byteHolder to the pool so that is available for future use?
}
該應用程序是用.NET 4.5運行時編寫的C#,我們試圖阻止大對象堆的碎片化。
編輯:澄清正在返回原始字節[]。
RMI調用返回後是否有資格進行垃圾回收? – 2015-02-04 15:17:08
這不是垃圾收集......這是擁有陣列池的關鍵。我將闡明這是一個C#.NET 4.5應用程序。 – 2015-02-04 15:21:24
我明顯錯過了關於資源池的部分。 – 2015-02-04 15:23:23