Я создал службу Windows , которая будет сохранять данные из Биометрия в базу данных.
Я использовал Mysql в качестве базы данных, а затем ZKTeco as Биометрия .Чтобы получить данные из биометрии, я использовал dll .но основная проблема заключается в том, что сервис увеличивает загрузку процессора с HIGH с 0.01%
до 30-50%
и не падает, если я не нажму стоп, а затем снова запустится.
Я пытался поставить thread.sleep
, где большинство = случаев - это решение, но не решает мое, я использую backgroundworker
, поскольку это минимизирует использование процессора, а не использование таймера.
как я могу решить или исправить ВЫСОКИЙ ЦП?я попробовал thread.sleep(5000
5 секунд, thread.sleep(1000)
1 секунду и наконец thread.sleep(10)
ничего не получалось
private void sendata()
{
try
{
//fetch db parameter by inifile
_Host = _inifile.ReadSetting("Database Connection", "Host", 5000, "");
_User = _inifile.ReadSetting("Database Connection", "User", 5000, "");
_Port = _inifile.ReadSetting("Database Connection", "DBPort", 5000, "");
_DBname = _inifile.ReadSetting("Database Connection", "Name", 5000, "");
//Data from Biometric
ICollection<MachineInfo> lstMachineInfo = manipulator.GetLogData(objZkeeper, int.Parse(MachineNo));
//MySQL Connection
connectionString = @"server=" + _Host + @";user id=" + _User + @";port=" + _Port + @";password=hj^yr490Tweh@ty4;database=" + _DBname + @";Min Pool Size=5;Max Pool Size=100;";
//Connection Starts
using (var con = new MySqlConnection(connectionString))
{
con.Open();
var cmd = con.CreateCommand();
var cmdid = con.CreateCommand();
cmd.CommandText ="set foreign_key_checks=0;CREATE TABLE IF NOT EXISTS `z_log`(`log_id` INT(11) NOT NULL AUTO_INCREMENT ,`machine_id` VARCHAR(50) NOT NULL,`subscription` VARCHAR(50) NOT NULL,`branch_id` VARCHAR(50),`user_id` VARCHAR(50),`datetime` VARCHAR(255),`checktype` VARCHAR(50),`accesstoken` VARCHAR(50),`status` VARCHAR(50) ,PRIMARY KEY (`log_id`),UNIQUE(`datetime`))ENGINE =INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1 COMMENT='List of ID type'";
cmd.ExecuteNonQuery();
//Get todays data
var result = lstMachineInfo.ToList().Where(a => a.datetime > DateTime.Now).ToList();
//fetch todays data
foreach (var data in result)
{
//Check last id
cmdid.CommandText =
"SELECT IF(COUNT(*)=0,0,(SELECT log_id FROM `z_log` ORDER BY log_id DESC LIMIT 1)) AS `ID` FROM z_log;";
var drd = cmdid.ExecuteReader();
while (drd.Read())
{
counts = Convert.ToInt32(drd["ID"].ToString()) + 1;
Thread.Sleep(10);
}
drd.Close();
//save data where userid & datetime are not duplicate
string inserquery =
"INSERT IGNORE Into z_log(log_id,machine_id,subscription,branch_id,user_id,datetime,checktype,accesstoken,status)VALUES(" +
"@logid,@id,@subs,@branch,@user,@date,@check,@token,@status);";
cmd = new MySqlCommand(inserquery, con);
cmd.Parameters.AddWithValue("@logid", counts);
cmd.Parameters.AddWithValue("@id", data.MachineNumber);
cmd.Parameters.AddWithValue("@subs", Subscription.ToString());
cmd.Parameters.AddWithValue("@branch", BranchID.ToString());
cmd.Parameters.AddWithValue("@user", data.IndRegID);
cmd.Parameters.AddWithValue("@date", data.DateTimeRecord);
cmd.Parameters.AddWithValue("@check", data.InOut);
cmd.Parameters.AddWithValue("@token", AccessToken.ToString());
cmd.Parameters.AddWithValue("@status", "0");
cmd.ExecuteNonQuery();
Thread.Sleep(10);
}
con.Close();
}
}
catch (Exception ex)
{
Errorlogs(ex.ToString());
}
}
//Onstart
protected override void OnStart(string[] args)
{
ReadIni();
ZKBack.RunWorkerAsync();
}
//Do Work
private void ZKBack_DoWork(object sender, DoWorkEventArgs e)
{
try
{
//If device is not connected will connect
if (isDeviceConnected == false)
{
Connect();
}
//if connected will get data
else
{
sendata();
}
}
catch (Exception ex)
{
Errorlogs(ex.ToString());
}
}
private void ZKBack_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
Thread.Sleep(10);
ZKBack.RunWorkerAsync();
}