连续点击按钮请求数据时如何进行资源优化

按钮点击进行数据查询,数据响应却或多或少会有延迟,这方面原因可能是代码优化做的不好,可能是网络延迟等等。如果将查询函数写在主线程上,那么一旦延迟,页面将会假死,给人不好的感觉,如果将查询函数放在单独的线程中,或许可以解决页面假死的问题,但是暴露新的问题是,查询按钮将会一直为可点状态(这里我们不考虑按钮状态置为不可用)

如果按钮一直可以点击,线程中的请求就不会间断,那么服务器资源压力也会增大,如何减轻这方面问题呢?

第一种方法,也是最常用的一种方法,做一个bool类型的字段去判断,如果第一次点击按钮bool字段设置为true,线程中进行数据查询,响应数据后再将字段改为false。如果第一次按钮请求还未结束,再去点击按钮,判断一下,如果字段值为true,就不去执行请求操作。

bool flag = false;

void QueryClick(object sender,EventArgs e)

{

       if(!flag ){

       Thread queryThread = new Thread(new ThreadStart(Query));

       queryThread .Start();

       }

 

}

void Query()

{

      //查询数据

        flag = false;

}

 

第二种方法,在点击按钮的时候记录当前时间,然后去监听它,如果两次点击按钮间隔500毫米内,就不去请求数据,反之则请求。

DateTime? queryTime = null;

Thread queryThread = null;

ManualResetEvent wait = new ManualResetEvent(false);

void QueryClick(object sender,EventArgs e)

{

         queryTime  = DateTime.Now;

         wait.Set(); 

         if(queryThread ==null)

    {

      queryThread = new Thread(new ThreadStart(Query));

           queryThread .Start();

    }

}

 

void Query()

{

      While(true){

      wait.Reset();

      Thread.Sleep(500);  

      DateTime tmpTime = DateTime.Now;

      TimeSpan ts = (TimeSpan)(tmpTime -queryTime );

      if(ts.TotalMilliseconds>500) //查询数据

      wait.WaitOne();

      }

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2014-04-16 17:55  ChangNan  阅读(672)  评论(0)    收藏  举报