多线程SOCKET服务端.其中有发送文件等循环操作!可CPU占用率100%.查阅相关资料解决办法为在适当位置Thread.Sleep(100).可现在问题是.只要客户端请求线程数一增多这CPU占用率又随之加大.请问各位能给个好点的算法.比如根据线程数来设定线程睡眠时间!减少CPU占用率呢???

解决方案 »

  1.   

    既然100%说明你的代码就是会导致100%,Sleep有什么用,那不等于消极怠工吗?关键在于要找到代码的问题,有没有没有意义的性能支出(死循环,可优化的算法等)。
      

  2.   

    while ((read = fs.Read(bytes, 0, bytes.Length)) > 0)
                    {
                        mySocket.Send(bytes, 0, read, SocketFlags.None);                    iTotBytes += read;
                    }
    这代码不能优化了吧?????这是线程中传送文件的代码.晕!!只有SLEEP()才能唤醒系统其它线程.这样CPU占用率才不会太高嘛!
      

  3.   

    ((read = fs.Read(bytes, 0, bytes.Length)) > 0
    这个条件什么时候退出
      

  4.   

    在适当位置加
    Application.DoEvents();
      

  5.   

    关机 然后cpu使用率为0 多好哇~
      

  6.   

    建议用异步调用,(read = fs.Read(bytes, 0, bytes.Length)) > 0 会阻塞当前线程的
      

  7.   

    不行.我改成异步调用.只要线程达到10个.CPU占用率就到90%.:(没有从更本上解决问题.
    我就在想.这IIS一类的系统.为什么就算100人同一时间段内访问服务器.好像也没那么夸张吧?