deserialize system.outofmemoryexception
Posted
by
clanier9
on Stack Overflow
See other posts from Stack Overflow
or by clanier9
Published on 2012-11-25T01:01:31Z
Indexed on
2012/11/25
23:04 UTC
Read the original article
Hit count: 309
visual-studio
|serialization
|deserialization
|outofmemoryexception
|binaryformatter
I've got a serializeable class called Cereal with several public fields shown here
<Serializable> Public Class Cereal
Public id As Integer
Public cardType As Type
Public attacker As String
Public defender As String
Public placedOn As String
Public attack As Boolean
Public placed As Boolean
Public played As Boolean
Public text As String
Public Sub New()
End Sub
End Class
My client computer is sending a new Cereal to the host by serializing it shown here
'sends data to host stream (c1)
Private Sub cSendText(ByVal Data As String)
Dim bf As New BinaryFormatter
Dim c As New Cereal
c.text = Data
bf.Serialize(mobjClient.GetStream, c)
End Sub
The host listens to the stream for activity and when something gets put on it, it is supposed to deserialize it to a new Cereal shown here
'accepts data sent from the client, raised when data on host stream (c2)
Private Sub DoReceive(ByVal ar As IAsyncResult)
Dim intCount As Integer
Try
'find how many byte is data
SyncLock mobjClient.GetStream
intCount = mobjClient.GetStream.EndRead(ar)
End SyncLock
'if none, we are disconnected
If intCount < 1 Then
RaiseEvent Disconnected(Me)
Exit Sub
End If
Dim bf As New BinaryFormatter
Dim c As New Cereal
c = CType(bf.Deserialize(mobjClient.GetStream), Cereal)
If c.text.Length > 0 Then
RaiseEvent LineReceived(Me, c.text)
Else
RaiseEvent CardReceived(Me, c)
End If
'starts listening for action on stream again
SyncLock mobjClient.GetStream
mobjClient.GetStream.BeginRead(arData, 0, 1024, AddressOf DoReceive, Nothing)
End SyncLock
Catch e As Exception
RaiseEvent Disconnected(Me)
End Try
End Sub
when the following line executes, I get a System.OutOfMemoryException and I cannot figure out why this isn't working.
c = CType(bf.Deserialize(mobjClient.GetStream), Cereal)
The stream is a TCPClient stream. I'm new to serialization/deserialization and using visual studio 11
© Stack Overflow or respective owner