title: ProtoBuf-Net err msg - "An exception of type 'System.OutOfMemoryException' occurred in mscorlib.dll but was not handled in user code"
body: <p>While Serializing a dynamic object with around 250 properties and approx 20,000 rows I am getting the below error. The same code works fine when the number of properties are around 20. The error occurred at point <strong><em>Serializer.Serialize(stream, lst);</em></strong></p>
  
  <pre><code>An unhandled exception of type 'System.OutOfMemoryException' occurred in System.ServiceModel.Internals.dll
  
  at System.IO.MemoryStream.set_Capacity(Int32 value)
  at System.IO.MemoryStream.EnsureCapacity(Int32 value)
  at System.IO.MemoryStream.Write(Byte[] buffer, Int32 offset, Int32 count)
  at ProtoBuf.ProtoWriter.Flush(ProtoWriter writer) in c:\Dev\protobuf-net\protobuf-net\ProtoWriter.cs:line 534
  at ProtoBuf.ProtoWriter.Dispose() in c:\Dev\protobuf-net\protobuf-net\ProtoWriter.cs:line 478
  at ProtoBuf.ProtoWriter.System.IDisposable.Dispose() in c:\Dev\protobuf-net\protobuf-net\ProtoWriter.cs:line 472
  at ProtoBuf.Meta.TypeModel.Serialize(Stream dest, Object value, SerializationContext context) in c:\Dev\protobuf-net\protobuf-net\Meta\TypeModel.cs:line 218
  at ProtoBuf.Meta.TypeModel.Serialize(Stream dest, Object value) in c:\Dev\protobuf-net\protobuf-net\Meta\TypeModel.cs:line 201
  at ProtoBuf.Serializer.Serialize[T](Stream destination, T instance) in c:\Dev\protobuf-net\protobuf-net\Serializer.cs:line 87
  at WcfService1.DynamicWrapper.Serialize(DynamicWrapper lst) in c:\Users\rkohli\Documents\Visual Studio 2012\Projects\WindowsFormsApplication3\WcfService1\SerializeObject.cs:line 136
  at WcfService1.Service1.GetData(String sVisibleColumnList) in c:\Users\rkohli\Documents\Visual Studio 2012\Projects\WindowsFormsApplication3\WcfService1\Service1.svc.cs:line 22
  at SyncInvokeGetData(Object , Object[] , Object[] )
  at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]&amp; outputs)
  at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc&amp; rpc)
  at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc&amp; rpc)
  at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage41(MessageRpc&amp; rpc)
  at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc&amp; rpc)
  at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc&amp; rpc)
  at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc&amp; rpc)
  at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc&amp; rpc)
  at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc&amp; rpc)
  at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc&amp; rpc)
  at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)
  at System.ServiceModel.Dispatcher.ChannelHandler.DispatchAndReleasePump(RequestContext request, Boolean cleanThread, OperationContext currentOperationContext)
  at System.ServiceModel.Dispatcher.ChannelHandler.HandleRequest(RequestContext request, OperationContext currentOperationContext)
  at System.ServiceModel.Dispatcher.ChannelHandler.AsyncMessagePump(IAsyncResult result)
  at System.ServiceModel.Dispatcher.ChannelHandler.OnContinueAsyncReceive(Object state)
  at System.Runtime.ActionItem.DefaultActionItem.TraceAndInvoke()
  at System.Runtime.ActionItem.DefaultActionItem.Invoke()
  at System.Runtime.ActionItem.CallbackHelper.InvokeWithoutContext(Object state)
  at System.Runtime.IOThreadScheduler.ScheduledOverlapped.IOCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* nativeOverlapped)
  at System.Runtime.Fx.IOCompletionThunk.UnhandledExceptionFrame(UInt32 error, UInt32 bytesRead, NativeOverlapped* nativeOverlapped)
  at System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP)
  </code></pre>
  
  <p><em>The below is the code sample.</em></p>
  
  <pre><code>[Serializable]
  [ProtoContract]
  public class DynamicWrapper
  {
      [ProtoMember(1, DataFormat = DataFormat.Group)]
      public List&lt;DictWrapper&gt; Items { get; set; }
  
      public DynamicWrapper()
      {
          Items = new List&lt;DictWrapper&gt;();
      }
  
      public static byte[] Serialize(DynamicWrapper lst)
      {
          byte[] msgOut;
  
          using (var stream = new MemoryStream())
          {
              Serializer.Serialize(stream, lst);
              msgOut = stream.ToArray();
          }
  
          return msgOut;
      }
  
      public static DynamicWrapper Deserialize(byte[] message)
      {
          DynamicWrapper msgOut;
  
          using (var stream = new MemoryStream(message))
          {
              msgOut = Serializer.Deserialize&lt;DynamicWrapper&gt;(stream);
          }
  
          return msgOut;
      }
  }
  
  [Serializable]
  [ProtoContract]
  public class DictWrapper
  {
      [ProtoMember(1, DataFormat = DataFormat.Group)]
      public Dictionary&lt;string, string &gt; Dictionary { get; set; }
  
      public DictWrapper()
      {
          Dictionary = new Dictionary&lt;string, string&gt;();
      }
  }
  </code></pre>