我们的应用程序是基于客户端 - 服务器的应用程序,我已经从.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