C# 系统内存不足异常
我们正在使用Visual studio C#2010和SQL server进行客户机-服务器套接字编程 程序运行良好。但过了一段时间,它偶然发现了这个错误C# 系统内存不足异常,c#,visual-studio-2010,sockets,out-of-memory,C#,Visual Studio 2010,Sockets,Out Of Memory,我们正在使用Visual studio C#2010和SQL server进行客户机-服务器套接字编程 程序运行良好。但过了一段时间,它偶然发现了这个错误 "System out of memory exception" 这里我们使用一个套接字包类 public class SocketPacket { public SocketPacket(System.Net.Sockets.Socket socket, int clientNumber, string ClientI
"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;
}
我想数据缓冲区已经满了
如何释放数据缓冲区?您的
SocketPacket
类包含实现IDisposable
接口的System.Net.Sockets.Socket
类型的字段,因此您应该手动处理类的实例。我还建议您在SocketPacket
类中实现IDisposable
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();
}
}
您应该查看MSDN报告,了解如何正确实现IDisposable。这可能会解决您的问题
编辑:在进一步检查之后,C#type套接字还实现了IDisposable,因此尝试在使用套接字对象时使用using()块。这将确保您正确清理套接字对象。System.Net.Sockets.Socket是IDisPossible,因此您需要手动处理它。感谢您的响应,它可以正常工作,但在处理之后,客户端将断开连接。如何管理。感谢您的回复,它可以正常工作,但在dispose之后,客户端断开连接。如何管理。您能否显示完整的
SocketPacket
类源代码。也许您不需要将socket
传递到此类中。我正在执行多线程应用程序,并在System.Collections.ArrayList中维护列表