我在C#中的Windows Form应用程序中使用ZeroMQ。 ZeroMQ使用Publisher-Subscriber模式,由3个发布者组成,用于发布3种不同类型的数据。以下是代码段 -
var ZmqContext = new ZContext();
ZmqContext.SetOption(ZContextOption.IO_THREADS, 3);
var DataType1Publisher = new ZSocket(zmqContext, ZSocketType.PUB);
var DataType2Publisher = new ZSocket(zmqContext, ZSocketType.PUB);
var DataType3Publisher = new ZSocket(zmqContext, ZSocketType.PUB);
DataType1Publisher.SetOption(ZSocketOption.CONFLATE, 1);
DataType1Publisher.Bind("tcp://*:10001");
DataType2Publisher.SetOption(ZSocketOption.CONFLATE, 1);
DataType2Publisher.Bind("tcp://*:10002");
DataType3Publisher.SetOption(ZSocketOption.CONFLATE, 1);
DataType3Publisher.Bind("tcp://*:10003");
DataType1Publisher.Send(new ZFrame(DataType1ByteArray));
DataType2Publisher.Send(new ZFrame(DataType2ByteArray));
DataType3Publisher.Send(new ZFrame(DataType3ByteArray));
DataType1ByteArray
,DataType2ByteArray
和DataType3ByteArray
是通过将byte
和uint
数据转换为float
手动合成的byte
数组数组如下 -
int MAX_LENGTH = 100;
byte[] DataType1ByteArray = new byte[MAX_LENGTH];
int DataType1ByteArrayIndex = 0;
unsafe private void AddUint(uint point)
{
byte* bytePtr = (byte*)&point;
for (int i = 0; i < sizeof(uint); i++)
{
DataType1ByteArray[DataType1ByteArrayIndex++] = bytePtr[i];
}
}
unsafe private void AddFloat(float point)
{
byte* bytePtr = (byte*)&point;
for (int i = 0; i < sizeof(float); i++)
{
DataType1ByteArray[DataType1ByteArrayIndex++] = bytePtr[i];
}
}
以下是我的观察 -
请注意,代码适用于BitConverter类。但是,为了加快速度,我使用了byte* bytePtr = (byte*)&point
,因为它比BitConverter
快得多。
虽然我不确定它是否会出现某种内存泄漏。如何调试此问题并使其工作?有任何解决方法吗?