1
votes

So I am working with Protobufs in .NET and I am trying to incorporate them with a buffer pool and AsyncSocketEventArgs pool. The buffer pool assigns sections of a huge byte array to the event args.

So, the problem, I can't figure out a way to have Protobufs serialize directly onto one of my buffers. Instead all methods appear to serialize onto there own buffers, which wastes time/memory... Any way to do what I'm looking for?

EDIT: I have created a proto scheme and I generate messages that contain deltas not entirely serialized classes, so I believe using the attributes/Serializer class won't help me. I want to write the bytes directly into one of my buffers. I believe MemoryStream, from what I have read will still just point to a created byte array, which will still waste a lot of time/memory.

1
This has nothing to do with the question but event-driven socket IO is almost obsolete since the arrival of await. The CPU saving are very small and the architectural impact is huge. - usr
Good to know I think I'm working on a few out dated sites haha. I'll do more research. - guitar80

1 Answers

1
votes

Use a memory stream

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
    {
    }

}
​