首页 新闻 搜索 专区 学院

加锁导致内存占用逐渐加大?怎么办

0
[已解决问题] 解决于 2013-08-15 11:17
 1  
 2 这是第一个窗体的代码
 3 
 4  private void button1_Click(object sender, EventArgs e)
 5         {
 6             while (true)
 7             {
 8                 SqlConnection conn = new SqlConnection("Data Source=DMWIAJHLRQMX6QS;Initial Catalog=test;Persist Security Info=True;User ID=sa;Pwd=111111");
 9                 conn.Open();
10                 string cmdStr = "insert into test_interfacetable0760 with(xlock) (SendPhone,text,SendTime,states,UserID) values ('13888888888','测试内容','2013-8-14',1,32) ";
11                 SqlCommand cmd = new SqlCommand();
12                 cmd.Connection = conn;
13                 cmd.CommandText = cmdStr;
14                 try
15                 {
16                     cmd.ExecuteNonQuery();
17                 }
18                 catch (Exception ex)
19                 {
20                     MessageBox.Show(ex.Message);
21                 }
22                 finally
23                 {
24                     conn.Close();
25                 }
26             }
27         }
28 
29 
30 这是第二个窗体的代码
31 
32 private void button1_Click(object sender, EventArgs e)
33         {
34             while (true)
35             {
36                 SqlConnection conn = new SqlConnection("Data Source=DMWIAJHLRQMX6QS;Initial Catalog=test;Persist Security Info=True;User ID=sa;Pwd=111111");
37                 conn.Open();
38                 SqlCommand cmd = new SqlCommand();
39                 cmd.Connection = conn;
40                 string selecStr = "select top 1 * from test_interfacetable0760 with(xlock)  where states=1 ";
41                 cmd.CommandText = selecStr;
42                 int tempid = Convert.ToInt32(cmd.ExecuteScalar());
43                 string cmdStr = "update test_interfacetable0760 with(xlock)   set SendPhone='13777777777',text='更新的测试内容',SendTime='2000-8-14',states=2,UserID=22 where tempid=" + tempid + "";
44                 cmd.CommandText = cmdStr;
45                 try
46                 {
47                     cmd.ExecuteNonQuery();
48                 }
49                 catch (Exception ex)
50                 {
51                     MessageBox.Show(ex.Message);
52                 }
53                 finally
54                 {
55                     conn.Close();
56                 }
57             }
58         }

我 开着两个程序同时运行的时候,操作什么的都正确(数据库可以看见这些操作的正确性),可是内存在不停的增加,cpu也占用100%了,这是为什么呢

.F.的主页 .F. | 初学一级 | 园豆:13
提问于:2013-08-14 12:11
< >
分享
最佳答案
0

while (true)        {}
你这是死循环啊。。不管里面是什么,都会100%的,时间是搞死机器的良药啊

奖励园豆:5
小AI | 菜鸟二级 |园豆:354 | 2013-08-14 12:41

我这是要不断的对数据库里面的内容做判断   采用的死循环

.F. | 园豆:13 (初学一级) | 2013-08-14 12:48

@.F.: ...这是。。。死循环的结果只有一个:死。你可以另外开启一个县城定时来搞这个事情。简单点有个什么timer的东西,每隔xx秒执行一次。怎么能够明摆着用死循环呢。。

小AI | 园豆:354 (菜鸟二级) | 2013-08-14 12:53

@.F.: 这样子搞:

   public class Monitor
    {
        private System.Timers.Timer timer = new System.Timers.Timer();
        public void StartMonitor()
        {
            InitializeTimer();
        }
        private void InitializeTimer()
        {
            timer.Interval = 60000;//设置时间间隔
            timer.Elapsed += new System.Timers.ElapsedEventHandler(Timer_Elapsed);
            timer.Start();
        }
        private void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
        }
    }
小AI | 园豆:354 (菜鸟二级) | 2013-08-14 13:02

@小AI: 嗯 你说的这个我明白了

那while(true)是搞死机器的良药...

while(true)拿来是做什么用的呢?

.F. | 园豆:13 (初学一级) | 2013-08-14 16:46

@.F.: 兄弟你把我问住了。。。

小AI | 园豆:354 (菜鸟二级) | 2013-08-14 19:06

@.F.: 

看看这个文章,http://lavasoft.blog.51cto.com/62575/105526

小AI | 园豆:354 (菜鸟二级) | 2013-08-14 19:27

@.F.: while(true)最大的作用是让程序永远的运行下去并没有终点。

````` | 园豆:14268 (专家六级) | 2013-08-14 19:33

@小AI: while true同时加sleep吗, 和timer采取不同的方式来达到不断执行。 timer可能导致一个问题:一秒钟执行一次, 一次执行两秒钟。 这个会卡的你很惨。

undefined | 园豆:698 (小虾三级) | 2013-08-15 12:53
其他回答(2)
0

把while循环去掉

nil | 园豆:667 (小虾三级) | 2013-08-14 14:02
0

这不是加锁的问题,是代码的问题,建议改进代码

dudu | 园豆:38908 (高人七级) | 2013-08-14 16:38

去掉while?

支持(0) 反对(0) .F. | 园豆:13 (初学一级) | 2013-08-14 16:46
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册