使用Foreach循环的C#Windows服务高CPU使用率,如何最小化cpu使用率?

时间:2018-12-12 01:52:16

标签: c#

我仍然是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");
        }

    }

1 个答案:

答案 0 :(得分:1)

Thread.Sleep(10);添加到您的foreach循环中。这将导致该过程每次迭代暂停10毫秒,这对于CPU来说是一生。