C# 系统内存不足异常

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

我们正在使用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;
    }
我想数据缓冲区已经满了


如何释放数据缓冲区?

您的
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中维护列表