1

我们正在使用 Visual Studio C# 2010 和 SQL SERVER 进行客户端服务器套接字编程。

该程序运行良好。但是过了一段时间它偶然发现了错误

"System out of memory exception"

这里我们使用一个socket包类

 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 已满

如何释放数据缓冲区?

4

2 回答 2

2

SocketPacket的类包含System.Net.Sockets.Socket实现IDisposible接口的类型字段,因此您应该手动处理您的类的实例。另外我建议你在课堂上实现 IDisposible SocketPacket

    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();
        }
    }
于 2012-08-08T05:24:40.733 回答
0

您应该查看有关如何正确实施 IDisposable 的 MSDN 报告。这可能会解决您的问题。http://msdn.microsoft.com/en-us/library/ms244737(v=vs.80).aspx

编辑:经过进一步检查,C# 类型的 Socket 也实现了 IDisposable,因此尝试使用 using() 块围绕 Socket 对象的使用。这将确保您正确清理 Socket 对象。

于 2012-08-08T07:24:36.407 回答