private void ReceiveCallback(IAsyncResult ar)
        {
            StateObject state = (StateObject)ar.AsyncState;
            Socket client = state.workSocket;
            try
            {
                if (state.workSocket.Available != 0)//缓冲区有数据
                {
                    int bytesRead = client.EndReceive(ar);
                    if (bytesRead > 0)
                    {
                        byte[] data = new byte[bytesRead];
                        Array.Copy(state.buffer, 0, data, 0, bytesRead);
                        lock (((ICollection)dataBuffers).SyncRoot)
                        {
                            dataBuffers.Enqueue(data);
                        }
                    }
                }
                Thread.Sleep(100);
                client.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReceiveCallback), state);            }
            catch (Exception ex)
            {
                client.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReceiveCallback), state);
                PubWriteLog.WriteError(ex.Message);
                PubWriteLog.WriteError(ex.StackTrace);
            }
        }
用SOCKET接收数据的时候CPU利用率一直在50%以上,数据量比较大,麻烦问一下童鞋们有没有方法可以让CPU降下来,试了让线程sleep不是很奏效~ 

解决方案 »

  1.   

    取决于你是否异步操作,你这个过程只是其中一个,要整体看,看看代码中是否有while循环,没有释放cpu时间
      

  2.   


    没有用while 只是在初始接收socket类里面调用了回调函数~   StateObject state = new StateObject();
                state.workSocket = PubSocket.ClientSocket;
                if (PubSocket.ClientSocket != null)
                {
                    PubSocket.ClientSocket.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReceiveCallback), state);
                }
      

  3.   


    不亏是级别这么高的牛人。一下子提醒了我,问题不在接收这一块,是我处理那块有一个while(true),非常感谢~