我仍然是Windows Service的新手,该服务将每30秒循环一次并显示数据,但是cpu的使用率一直从0%增加到70%,并且从未减少。我问的是如何最小化cpu的使用?我听说循环是CPU使用率高的原因,尝试了lamda foreach,但没有任何变化
protected override void OnStart(string[] args)
{
Connect();
WriteToFile("Service Starts at " + DateTime.Now);
timer.Elapsed += new ElapsedEventHandler(onElapsedTime);
timer.Interval = 30000;
timer.Enabled = true;
GetData();
}
private void onElapsedTime(object source, ElapsedEventArgs e)
{
GetData();
}
private void GetData()
{
try
{
ICollection<MachineInfo> lstmachineInfo
=manipulator.GetLogData(objZkeeper,
int.Parse(tbxMachineNumber.Text.Trim()));
if (lstmachineInfo != null && lstmachineInfo.Count > 0)
{
var result = lstmachineInfo.ToList().Where(a => a.datetime
>=DateTime.Now.AddMinutes(-1)).ToList();
WriteToFile(result.Count + " records found......");
foreach (var data in result)
{
WriteToFile("MachineNumber: " + data.MachineNumber + "
UserID : " + data.IndRegID +" Datetime : " +
data.DateTimeRecord + " Status : " + data.InOut);
}
}
else
{
WriteToFile("failed in connecting with device, reconnecting
....");
objZkeeper = new ZkemClient(RaiseDeviceEvent);
isDeviceConnected = objZkeeper.Connect_Net(IPAddress, Port);
}
}
catch (Exception ex)
{
Errorlogs(ex.ToString());
Errorlogs("\n");
}
}
答案 0 :(得分:1)
将Thread.Sleep(10);
添加到您的foreach循环中。这将导致该过程每次迭代暂停10毫秒,这对于CPU来说是一生。