c# socket 通常使用半天 程序会自动关闭

c# socket 正常使用半天 程序会自动关闭
放在windows 2008server 上的,16G内存  半天就自动挂掉了,报错CLR20r3 和System.OutOfMemoryException

        IPAddress ip1;
        private bool isExit = false;
        TcpListener listener;
        private ManualResetEvent allDone = new ManualResetEvent(false);

myThread = new Thread(new ThreadStart(AcceptConnection));
            myThread.Start();

 private void AcceptConnection()
        {

            IPHostEntry ipHost = Dns.Resolve(Dns.GetHostName());
            ipHost.AddressList[0];
            ip1 = IPAddress.Parse("172.19.58.164");

            listener = new TcpListener(ip1, 3001);

            listener.Start();
            while (isExit == false)
            {
                try
                {
                    allDone.Reset();
                    Application.DoEvents();
                    AsyncCallback callback = new AsyncCallback(AcceptTcpClientCallBack);
                    listener.BeginAcceptTcpClient(callback, listener);
                    allDone.WaitOne();
                }
                catch (Exception e)
                {
                    break;
                }
            }
        }   

private void AcceptTcpClientCallBack(IAsyncResult iar)
        {
            try
            {
                allDone.Set();
                TcpListener mylistener = (TcpListener)iar.AsyncState;
                TcpClient client = mylistener.EndAcceptTcpClient(iar);
                DataReadWrite datareadwrite = new DataReadWrite(client);
                datareadwrite.ns.BeginRead(datareadwrite.read, 0, datareadwrite.read.Length, ReadCallBack, datareadwrite);
            }
            catch (Exception e)
            {
                return;
            }
        }

private void ReadCallBack(IAsyncResult iar)
        {
            string revstring = string.Empty;
            string msg = string.Empty;
            try
            {
                DataReadWrite datareadwrite = (DataReadWrite)iar.AsyncState;
                int recv = datareadwrite.ns.EndRead(iar);
                revstring.Remove(0, revstring.Length);