BTDB.EventStore2Layer.EventSerializer.Serialize C# (CSharp) Method

Serialize() public method

public Serialize ( bool &hasMetaData, object obj ) : ByteBuffer
hasMetaData bool
obj object
return ByteBuffer
        public ByteBuffer Serialize(out bool hasMetaData, object obj)
        {
            if (obj == null)
            {
                hasMetaData = false;
                _writer.WriteUInt8(0); // null
                return _writer.GetDataAndRewind();
            }
            _newTypeFound = false;
            StoreObject(obj);
            _visited.Clear();
            if (!_newTypeFound)
            {
                // No unknown metadata found - to be optimistic pays off
                hasMetaData = false;
                return _writer.GetDataAndRewind();
            }
            StoreNewDescriptors(obj);
            if (_typeOrDescriptor2InfoNew.Count > 0)
            {
                _writer.GetDataAndRewind();
                if (MergeTypesByShapeAndStoreNew())
                {
                    _typeOrDescriptor2InfoNew.Clear();
                    _visited.Clear();
                    hasMetaData = true;
                    return _writer.GetDataAndRewind();
                }
                _typeOrDescriptor2InfoNew.Clear();
            }
            _visited.Clear();
            _newTypeFound = false;
            StoreObject(obj);
            if (_newTypeFound)
            {
                throw new BTDBException("Forgot descriptor or type");
            }
            _visited.Clear();
            hasMetaData = false;
            return _writer.GetDataAndRewind();
        }

Usage Example

Example #1
0
        public void SerializationRunsAndDoesNotLeak1Byte()
        {
            var serializer = new EventSerializer();

            bool hasMetadata;

            var meta = serializer.Serialize(out hasMetadata, new User());
            serializer.ProcessMetadataLog(meta);
            long baselineMemory = 0;
            for (int i = 0; i < 100; i++)
            {
                serializer.Serialize(out hasMetadata, new User());
                Assert.False(hasMetadata);
                if (i == 2)
                {
                    GC.Collect(2);
                    GC.WaitForPendingFinalizers();
                    GC.Collect(2);
                    baselineMemory = GC.GetTotalMemory(false);
                }
            }
            GC.Collect(2);
            GC.WaitForPendingFinalizers();
            GC.Collect(2);
            Assert.InRange(GC.GetTotalMemory(false), 0, baselineMemory+400);
        }
All Usage Examples Of BTDB.EventStore2Layer.EventSerializer::Serialize