系统内存不足异常

时间:2012-08-08 05:20:34

标签: 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 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?

2 个答案:

答案 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对象。