程序一运行,CPU就占用50% 同样的代码,以前很正常。现在把代码从VS2003升级到VS2005后,运行程序就占用50%的CPU,在运行程序的时候没有任体操作,线程也没有运行。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在WINDOWS 2003上运行基本就接进100%了 太码太长了。 LoadDevice(); //加载设备信息 InitLogin(); //初始化登陆信息 InitCheckSnTimer(); //检测软件SN信息 时钟 _manageDev.StartComService (); //启动串口服务 _manageDev.StartNetService (); //启动SOCKET服务 先用打日志的方式,定位到执行哪段代码的时候CPU会100%,然后才能决定如何修改,你这么一说,谁也不知道你的代码结构没有人帮得了你; 把程序一部部的拆分,看看是那一块占用的CPU比较大,就知道问题所在了 以下代码是在一个线程里。以前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 } 1、代码有问题;2、对系统中异常进行处理。很可能是 _socketAl 执行时出现错误,或有其他的异常,对异常进行特定的处理才行。if (this._socketAl.Count <= 0) continue; //就是执行到这,一执在循环,以下代码并没有执行这个代码还是修改一下吧,这么一个判断,很可能出现问题的。if (this._socketAl.Count <= 0) { Thread.Sleep(5); continue;} while (true)if (this._socketAl.Count <= 0) continue;应该是代码问题,你查一下上边的语句,这句可能是死循环。 解决了,犯了一个低级错误,原来有Sleep(1000),后来不知道怎么没了。谢谢大家, C#日历问题,帮我看看这个错在哪,1900年1月是对的,2011年11月显示是错的 正则表达式的转义 C#如何去掉word文本框边框和填充色 messagebox.show()的小问题 SQL问题:如何过滤重复记录 HttpWebRequest 异步请求,为什么返回不正常呢。 求助!!!怎么将UTF7Encoding码转变成字符串 初学C#就给了我程序做,希望有高手能帮忙解决。 高分求大神,stocket 接收的时候出现接受到上条记录 如何尽快掌握C# 求8-bit转换 关于IPC连接问题
_manageDev.StartComService (); //启动串口服务
_manageDev.StartNetService (); //启动SOCKET服务
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
}
2、对系统中异常进行处理。很可能是 _socketAl 执行时出现错误,或有其他的异常,对异常进行特定的处理才行。if (this._socketAl.Count <= 0) continue; //就是执行到这,一执在循环,以下代码并没有执行这个代码还是修改一下吧,这么一个判断,很可能出现问题的。if (this._socketAl.Count <= 0)
{
Thread.Sleep(5);
continue;
}
if (this._socketAl.Count <= 0) continue;
应该是代码问题,你查一下上边的语句,这句可能是死循环。