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

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

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

不知道具体的业务不太好回答,毕竟业务不同需求也不一样。
不过如果就一般情况来说软件报警模块应该是启动开始到结束一直运行的。
基于这个的话。处理流程可以用一个死循环来,并根据模块需求定义需要数量的计数器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;
    }
}


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

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

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

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

新建一个线程,循环处理

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

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