c#线程中的代码执行时间非固定,而是越来越长
是这样的,我创建了一个线程A,A是写在一个thread类型定时器内,用来循环执行A,循环时间设置为5S,在A中有一段for循环代码,为了测试该代码每次执行过程的大致时间,我在代码前后分别加了两个累加数,测试发现刚开始很快,不到1S就执行完毕。但随着时间的流逝,执行整段循环代码的耗时越来越长,甚至超过5S。每次重新运行都是刚开始很快,然后慢慢变慢。
因为代码里面含有对数据库的操作,每次重新运行都是刚开始很快,然后慢慢变慢。所以个人觉得应该不是数据库表中数据太多导致响应时间慢慢变长。嵌套的for循环次数也不是太多,外层12,内层16,也就12X16=192次。但是发现将其改为2X5次后,就发现耗时基本保持固定数,或者叫增长的极其缓慢。
问题1.是什么导致耗时越来越长,每次执行不应该是差不多固定时间才对嘛?
问题2.我同时监视了CPU和内存,内存一直保持很稳定,但CPU不稳定,基本每隔5秒,就是每次执行循环代码时,CPU都会明显上升,然后回落,我给循环代码内部加了sleep(1),还是解决不了问题。另外按理说12X16次数也不是很多。改为2X5后CPU基本保持稳定。那我应该如何做才能避免CPU占用高呢?
求各位给出建议,下面我贴下代码:
以下均为A()方法中的代码
num1++;
label1.text = num1.tostring();
//连接数据库
SqlConnection con = new SqlConnection();
con.ConnectionString = @"Data Source =王-THINK;Initial Catalog=hw;Integrated Security=SSPI";
con.Open();
SqlCommand com = new SqlCommand();
com.Connection = con;
com.CommandType = CommandType.Text;
for (int i = 0; i < 12; i++)
{
for (int j = 0; j < 16; j++)
{
//下面两行代码是在th这个图片类型中创建一个矩形,用来获取该矩形的最大值,引用的第三方dll,这个DLL很成熟,可以排除耗时跟它无关。
MeasurementRectangle rectangle = th.Measurements.Add(new Rectangle(j * 20, i * 20, 20, 20));
temp[i, j] = rectangle.Max.Value;
//存入数据库
com.CommandText = "insert into [Table7_Temp] (时间,时,分,秒,毫秒,行,列,温度,标识,辐射率,摄像机号,区域号,creattime,总貌X,总貌Y,总貌H,总貌W)Values(//里面的变量就赘述了,但包含 temp[i, j] );
SqlDataReader dr = com.ExecuteReader();//执行SQL语句
dr.Close();//关闭执行
}
}
con.Close();//关闭数据库连接
num2++;
label2.text = num2.tostring();