我们正在使用Visual Studio C#2010和SQL SERVER进行客户端服务器套接字编程。
程序运行正常。但过了一段时间后,它偶然发现错误
"System out of memory exception"
这里我们使用套接字包类
public class SocketPacket
{
public SocketPacket(System.Net.Sockets.Socket socket, int clientNumber, string ClientIP)
{
m_currentSocket = socket;
m_clientNumber = clientNumber;
m_ClientIP = ClientIP;
}
public System.Net.Sockets.Socket m_currentSocket;
public int m_clientNumber;
public byte[] dataBuffer = new byte[10000000];
public string m_ClientIP;
}
我认为dataBuffer已满了
如何释放dataBuffer?
答案 0 :(得分:2)
您的SocketPacket
类包含实现System.Net.Sockets.Socket
接口的IDisposible
类型字段,因此您应该手动处理类的实例。另外,我建议你在SocketPacket
课程中实现IDisposible。
public class SocketPacket: IDisposable
{
public SocketPacket(System.Net.Sockets.Socket socket, int clientNumber, string ClientIP)
{
m_currentSocket = socket;
m_clientNumber = clientNumber;
m_ClientIP = ClientIP;
}
public System.Net.Sockets.Socket m_currentSocket;
public int m_clientNumber;
public byte[] dataBuffer = new byte[10000000];
public string m_ClientIP;
public void Dispose()
{
m_currentSocket.Dispose();
}
}
答案 1 :(得分:0)
您应该检查MSDN报告,了解如何正确实现IDisposable。这可能会解决您的问题。 http://msdn.microsoft.com/en-us/library/ms244737(v=vs.80).aspx
编辑:经过一些进一步的检查,C#类型的Socket也实现了IDisposable,所以尝试在Socket对象的使用周围使用using()块。这将确保您正确清理Socket对象。