C# Protobuf .NET 使用预先存在的字节数组
C# Protobuf .NET Using Preexisting Byte Array
所以我在 .NET 中使用 Protobufs,我试图将它们与缓冲池和 AsyncSocketEventArgs 池合并。缓冲池将一个巨大字节数组的部分分配给事件参数。
所以,问题是,我想不出一种方法让 Protobufs 直接序列化到我的一个缓冲区上。相反,所有方法似乎都序列化到自己的缓冲区上,这会浪费 time/memory...有什么方法可以做我正在寻找的事情吗?
编辑:我创建了一个原型方案,我生成的消息包含未完全序列化的增量 classes,所以我相信使用 attributes/Serializer class 对我没有帮助.我想将字节直接写入我的缓冲区之一。我相信 MemoryStream,从我读过的内容来看,它仍然只是指向一个创建的字节数组,这仍然会浪费很多 time/memory.
使用内存流
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Person person = new Person();
XmlSerializer serializer = new XmlSerializer(typeof(Person));
MemoryStream stream = new MemoryStream();
serializer.Serialize(stream, person);
}
}
public class Person
{
}
}
所以我在 .NET 中使用 Protobufs,我试图将它们与缓冲池和 AsyncSocketEventArgs 池合并。缓冲池将一个巨大字节数组的部分分配给事件参数。
所以,问题是,我想不出一种方法让 Protobufs 直接序列化到我的一个缓冲区上。相反,所有方法似乎都序列化到自己的缓冲区上,这会浪费 time/memory...有什么方法可以做我正在寻找的事情吗?
编辑:我创建了一个原型方案,我生成的消息包含未完全序列化的增量 classes,所以我相信使用 attributes/Serializer class 对我没有帮助.我想将字节直接写入我的缓冲区之一。我相信 MemoryStream,从我读过的内容来看,它仍然只是指向一个创建的字节数组,这仍然会浪费很多 time/memory.
使用内存流
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Person person = new Person();
XmlSerializer serializer = new XmlSerializer(typeof(Person));
MemoryStream stream = new MemoryStream();
serializer.Serialize(stream, person);
}
}
public class Person
{
}
}