TCP服务器编程CPU占有率过高问题
米兰张 2013-09-22 12:25:44 有几个问题需要咨询下各位大侠,采用的是tcplistener和tcpclient类客户端和服务端都在自己电脑上,客户端为网上下载测试工具。
1:当服务器端和客户端在通信的时候,CPU占用基本为0,但是当客户端断开连接的时候,CPU占用率一下达到25%,如果再断开,再连接CPU占用率还会上升。
2:当同一Ip第一次连接的时候,异步接收BeginAcceptTcpClient能执行,断开第二次再连接就不能执行,此时其它IP连接能执行。
MyTcpListenerInfo.MyTcpListener[Index].BeginAcceptTcpClient(new AsyncCallback(DoAcceptTcpClient), MyTcpListenerInfo.MyTcpListener[Index]);
对这个问题我是采用在DoAcceptTcpClient函数及其调用函数中使用了循环
for (int i = 0; i < MyTcpListenerInfo.MyTcpListener.Count; i++)
{
if (MyTcpListenerInfo.MyTcpListener[i].Pending())
{
MyTcpListenerInfo.MyTcpListener[i].BeginAcceptTcpClient(new AsyncCallback(DoAcceptTcpClient), MyTcpListenerInfo.MyTcpListener[i]);
}
}
来判断是否有新的连接接入,如果有则开始异步接收。这样做是否合理,还有这个异步模式是否包含IOCP。
3:对于高性能的TCP服务器,是否最好使用SocketAsyncEventArgs?
请各位大侠指点下,非常感谢!