c#循环检测不想用timer控件怎么办 5C

# 最近用c#做一个项目(软件报警模块),需要实时检测报警的触发,但是之前已用了几个timer控件了,不想再用timer控件实现,因为运行时间长会很占内存,所以想知道还有其他的一些办法吗,比较不占太多内存的,如果实在没有就只能用这个办法了,希望大神可以给出点建议!!!

8个回答

首先,不需要多个定时器,只要一个定时器,让它以你现在所有定时器间隔的最大公约数运行就可以了。
它内部按照你需要的间隔调用对应的操作。
比如1分钟的时候做什么,每2分钟的时候做什么。

其次,你说占用内存,这个要分析,是不是你有内存泄漏或者没有及时释放非托管的资源。要看你的代码。

showbo
支付宝加好友偷能量挖 正解。。。~
接近 2 年之前 回复

用分线程无限循环判断,有异常就输出日志并提示

weixin_42826174
weixin_42826174 分线程无限循环具体怎么做,程序已有两个线程,怎么做到一直循环检测,或者如何判断报警触发,然后经其显示
接近 2 年之前 回复

不知道具体的业务不太好回答,毕竟业务不同需求也不一样。
不过如果就一般情况来说软件报警模块应该是启动开始到结束一直运行的。
基于这个的话。处理流程可以用一个死循环来,并根据模块需求定义需要数量的计数器intSum1 。。。intSumN
然后再while(true)中,业务所需要最小的时间单位间隔来判断不同的模块的状态。
比如说(伪代码,固定数值最好定义成常量)
业务需要检查A程序是否运行,间隔时间为3秒,B程序是否运行间隔时间为5秒
那么定义全局变量

 int intA;  int intB;
intA = 0;
intB = 0;
while (true) {
    intA ++;
    intB ++;
    checkBiz();
    sleep(1000);
}

void checkBiz() {
    if (intA == 3) {
        //执行A对应的检测程序
        intA = 0;
    }
    if (intB == 5) {
        //执行A对应的检测程序
        intB = 0;
    }
}


用active mq,报警发布端有告警时发布消息,警报的接收端订阅消息.收到了触发事件来处理.

对啊,可以再启动一个线程一直来处理啊。while(true)死循环去调用检测的方法,最好置一个标志来break这个循环。

新建一个线程,循环处理

启一个线程后台去按照某个时间间隔循环刷数据即可

Quertz.net框架了解一下,每个定时任务都封装成一个job 然后Cron表达式写定时规则,虽然这个框架主要用于分布式,但是杀鸡用牛刀的感觉还是蛮好用的

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐