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不是很奏效~
{
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不是很奏效~
没有用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);
}
不亏是级别这么高的牛人。一下子提醒了我,问题不在接收这一块,是我处理那块有一个while(true),非常感谢~