private void tDate_Tick(object sender, EventArgs e)
{
    int weiCount_Compare = new chushihuamanager().GetCount("未审核");
    if (weiCount != weiCount_Compare)
    {
        weiCount = weiCount_Compare;
        LoadTree();
    }
    //像那样的判断还有10几个
    this.treeView1.ExpandAll();
}像上面那段代码,timer控件我是设其5秒刷新一次的,但是如果只有一个判断还好,但是有10几个啊(坑爹啊。。)
而且获取那些值的sql还是套着子查询的,这样数据量一多的话会不会导致程序性能低下,如果会的话应该怎么办?
将timer控件换成别的方式还是将子查询换成别的方式呢?
还有,再贴出像上面获取“weiCount_Compare”变量的值的sql语句:select * from LEANDA_资料初始化 where 是否打开 = 0
and 档案编号 not in (select 档案编号 from 实名模拟进度表 where 任务 = '短信通知' and 任务状态 = '已完成')
and 档案编号 in (select 档案编号 from 实名模拟进度表 where 任务 = '短信和邮件通知客户' and charindex(',jay,',',' + 待办人 + ',')>0)

我上面说了 想这样的判断有10几个哦请大家赐教啊
WinForm

解决方案 »

  1.   

    timer 5秒一次,太平凡了啊,尽量的把时间设置的长一些。
    或者 只触发一次,剩余的要客户手动触发,就是给个按钮,按钮触发这个事件
      

  2.   

    wpf里面有一个mvvm模式,可以做到有更新以后自动刷新,没更新不花心。 不过你需要系统的学习,就是每当model改变的时候,tree就会自动刷新,不过起点很高,要学会有难度。
        另外还有一个办法,就是一但有内容需要刷新的时候,就设置一个全局变量,(就是有新增数据的时候,就修改这个变量),那么你的timer每次执行的时候,就先去判断这个变量,是否需要刷新,不需要刷新,就不刷新了,如果需要刷新,那才刷新,这样可以节省很多资源
      

  3.   

    给你几个建议
    1 我想你用的应该是winform的trimer,这里有一个问题,如果5秒内,你的处理没执行完会怎么样?我想你困惑的性能低下很有可能就是这个原因。 你可以把这个trimer设计成,处理执行完后,过5秒再执行这个处理,这样就不会越来越慢了。
    2 new chushihuamanager().GetCount("未审核"); 这种写法尽量不要,除非你能保证chushihuamanager对象以后不被使用,否则你再new很浪费系统资源,因为程序效率的低下主要在于分配内存,运算很快。
    3 SQL语句的效率问题,你的语句一定要优化,效率太低了,具体要优化的太多了,给你举一个列子,你看你那not in 和 in 的子查询,完全可以写成一个,只需要变变where后面的等号,变成不等号。and soso on 
        
      

  4.   


    是的 我上面就是这样做的,在窗体加载是放一个变量,然后在timer控件中也有一个变量,如果两者的值的值不一致才进行刷新,但是就算是这样的话如果我那个获取数量那个表中有几十万条数据的话,那么应该用什么方法来优化呢,求哥们赐教。