同样的代码,以前很正常。现在把代码从VS2003升级到VS2005后,运行程序就占用50%的CPU,在运行程序的时候没有任体操作,线程也没有运行。

解决方案 »

  1.   

    在WINDOWS 2003上运行基本就接进100%了
      

  2.   

    太码太长了。 LoadDevice();          //加载设备信息 InitLogin();           //初始化登陆信息 InitCheckSnTimer();    //检测软件SN信息 时钟
    _manageDev.StartComService ();  //启动串口服务
    _manageDev.StartNetService ();  //启动SOCKET服务
      

  3.   

    先用打日志的方式,定位到执行哪段代码的时候CPU会100%,然后才能决定如何修改,你这么一说,谁也不知道你的代码结构没有人帮得了你;
      

  4.   

    把程序一部部的拆分,看看是那一块占用的CPU比较大,就知道问题所在了
      

  5.   

    以下代码是在一个线程里。以前CPU占用率并没有这么大,同样的代码
    while (true)
    {
                        
          if (this._socketAl.Count <= 0) continue;  //就是执行到这,一执在循环,以下代码并没有执行      System.Collections.ArrayList al = (System.Collections.ArrayList)this._socketAl.Clone();
          #region 
          if(al .Count >0)
         {
    foreach(SocketInfo sock in al )
    {

    try
    {
    sock.RemoteSocket .Send (sock.SendData);
                              
    System.Threading .Thread .Sleep (1000); int revNum=sock.RemoteSocket .Receive (this._data ,0,this._data .Length ,System.Net .Sockets .SocketFlags .None );
                                   
    Struct.BackCommandType type=Struct.BackCommandType .Nothing ; byte[] data=new byte [revNum]; if(revNum>0)
    {
    Array.Copy (this._data ,0,data,0,data.Length );

    type=(Struct.BackCommandType)data[3]; _args=new ReceiveDataArgs (sock.DeviceID  ,null ,sock.RemoteIP ,sock.RemotePort  ,data); ReceiveHandler(this,this._args ); }
    else
    {
    sock.RevError ++;
    if(sock.RevError >=3)
    {
    RemoveSocketInfo(sock);
    break;
    }
    }                ExchangeSendCmd(type,sock);
    System.Threading .Thread .Sleep (200); }
    catch(Exception e)
    { RemoveSocketInfo(sock);
    break;
    }
    }
    }
    #endregion

                }
      

  6.   

    1、代码有问题;
    2、对系统中异常进行处理。很可能是 _socketAl 执行时出现错误,或有其他的异常,对异常进行特定的处理才行。if (this._socketAl.Count <= 0) continue; //就是执行到这,一执在循环,以下代码并没有执行这个代码还是修改一下吧,这么一个判断,很可能出现问题的。if (this._socketAl.Count <= 0) 
    {
        Thread.Sleep(5);
        continue;
    }
      

  7.   

    while (true)
    if (this._socketAl.Count <= 0) continue;
    应该是代码问题,你查一下上边的语句,这句可能是死循环。
      

  8.   

    解决了,犯了一个低级错误,原来有Sleep(1000),后来不知道怎么没了。谢谢大家,