社区
C#
帖子详情
是用Timer好还是线程好?
chenwei175528
2012-10-29 04:55:33
针对
http://topic.csdn.net/u/20121029/16/4ff55293-13a7-4792-b650-91b5e1c42af0.html?seed=1223022908&r=80024247#r_80024247
这个的问题
如果需要开1000个的话
是开1000个Timer好
还是1000个线程好?
Timer/线程如果开1000个 能把cpu或者内存拖死不?
...全文
4069
31
打赏
收藏
是用Timer好还是线程好?
针对 http://topic.csdn.net/u/20121029/16/4ff55293-13a7-4792-b650-91b5e1c42af0.html?seed=1223022908&r=80024247#r_80024247 这个的问题 如果需要开1000个的话 是开1000个Timer好 还是1000个线程好? Timer/线程如果开1000个 能把cpu或者内存拖死不?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
31 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
chenwei175528
2012-10-31
打赏
举报
回复
[Quote=引用 30 楼 的回复:]
引用 29 楼 的回复:
那还用问什么了,原系统不给该。只能用线程轮询咯!结贴吧
。。。。。。
只是想讨论一下嘛 看有没有好方法
目前比较倾向于用Threading.Timer
这个是基于线程的计时器,且内部是用ThreadingPool的
[/Quote]
其实还有一个问题 用线程的话 sleep的时候是不占cpu资源的
我不知道timer在计时的时候是否占用
之前一个哥们测试了夏
用普通的timer的话 cpu利用率很低
一会我再试试用Threading.Timer看看他的cpu利用率怎么样
如果和用单纯的线程一样好的话 就用Threading.Timer
否则的话 就老老实实用线程吧。。。
chenwei175528
2012-10-31
打赏
举报
回复
[Quote=引用 29 楼 的回复:]
那还用问什么了,原系统不给该。只能用线程轮询咯!结贴吧
[/Quote]
。。。。。。
只是想讨论一下嘛 看有没有好方法
目前比较倾向于用Threading.Timer
这个是基于线程的计时器,且内部是用ThreadingPool的
路边一青蛙
2012-10-31
打赏
举报
回复
那还用问什么了,原系统不给该。只能用线程轮询咯!结贴吧
chenwei175528
2012-10-31
打赏
举报
回复
[Quote=引用 27 楼 的回复:]
看了那兄弟的帖子
为什么不用事件呢。。。
[/Quote]
我是要用这个思路做一个监控系统,是监控不同库不同表不同的业务,所以不可能让所有的系统都做修改
要兼顾已经上线的系统和还没上线的系统,已经上线的系统不可能让所有的系统都为了监控修改
chenwei175528
2012-10-31
打赏
举报
回复
[Quote=引用 24 楼 的回复:]
public delegate void EventTableChanged(int Table, int value);
public event EventTableChanged;//在数据库插入的地方声明改事件,在需要报警的地方订阅该事件
能熟练使用委托和事件的,应该一看就明白了!~
[/Quote]
这方法如果是在同一个系统中的确可行,可惜了不是。。。
Suriyel
2012-10-31
打赏
举报
回复
看了那兄弟的帖子
为什么不用事件呢。。。
chenwei175528
2012-10-31
打赏
举报
回复
[Quote=引用 23 楼 的回复:]
不管是1000个线程也好,timer也好。这种解决方案就是效率低下,C#中的委托和事件,这么强大的东西,效率比你1000个线程轮询高太多太多了。解决方案:将表A的数据写入数据之后,触发一个委托事件。
[/Quote]
这方法不行,我说了 要数据插入操作和监控操作要完全分离,不可能放到一起
首先,因为业务不同,可能插入的地方,有的是bs的有的是cs的,有的是服务,有的是应用程序,
你这样做的要求就是要每个插入的地方都做修改,且不考虑以前的系统,即使是新开发的系统,也是一个开销
我要实现的是一个监控系统,不是一个监控的思路,所以一定要分离,要做成应用的形式
路边一青蛙
2012-10-31
打赏
举报
回复
public delegate void EventTableChanged(int Table, int value);
public event EventTableChanged;//在数据库插入的地方声明改事件,在需要报警的地方订阅该事件
能熟练使用委托和事件的,应该一看就明白了!~
路边一青蛙
2012-10-31
打赏
举报
回复
不管是1000个线程也好,timer也好。这种解决方案就是效率低下,C#中的委托和事件,这么强大的东西,效率比你1000个线程轮询高太多太多了。解决方案:将表A的数据写入数据之后,触发一个委托事件。
salecn
2012-10-30
打赏
举报
回复
来学习一下,呵呵
silentcross
2012-10-30
打赏
举报
回复
Forms命名空间下的Timer不是真正的Timer,是通过在消息队列里插入消息来模拟的,就你的情况而言,这个Timer压根不用考虑。Threading下的Timer启动的任务就是在新线程里执行的,使用这个Timer和使用新线程其实是一码事。所以,你还是想办法把线程数量降下来才是正道
chenwei175528
2012-10-30
打赏
举报
回复
[Quote=引用 17 楼 的回复:]
引用 1 楼 的回复:
自己看吧
你这代码写的 问题非常严重,什么机器 隔着你这么搞啊
[/Quote]
这应该只是1L想帮LZ验证一下问题 写的测试代码吧。。。
chenwei175528
2012-10-30
打赏
举报
回复
[Quote=引用 13 楼 的回复:]
我看了你的原帖,你的数据是谁给你的,是不是自己的程序?数据是存放在数据库还是在别的地方?用的什么数据库,有很多数据库有触发器这种东西的。这种事情不用你轮询去读数据,效率低下,耗费大量系统资源!~
[/Quote]
用触发器是不可能的,首先触发器是带事物的,如果触发器失败的话,插入的数据也失败了
这个需求只是一个监控需求,不应该影响原业务的数据
数据是存放到数据库里的
chenwei175528
2012-10-30
打赏
举报
回复
[Quote=引用 11 楼 的回复:]
而且楼主需求也不明确,为什么要开1000个线程?你是要做什么东西?如果你是要定时执行一个方法的话,果断用System.Timers.Timer类,System.Timers.Timer也是一个单独的线程,所以访问窗体控件的时候,也必须使用委托!
[/Quote]
是做监控系统,1000个是我的假设量,初期可能没这么多,后期可能不止这些
XBodhi.
2012-10-30
打赏
举报
回复
[Quote=引用 1 楼 的回复:]
自己看吧
[/Quote]
你这代码写的 问题非常严重,什么机器 隔着你这么搞啊
XBodhi.
2012-10-30
打赏
举报
回复
你真 牛逼创建 1000个 Timer,
XBodhi.
2012-10-30
打赏
举报
回复
Timer 本身 就是线程好不。
超级大咸鱼
2012-10-30
打赏
举报
回复
[Quote=引用 13 楼 的回复:]
我看了你的原帖,你的数据是谁给你的,是不是自己的程序?数据是存放在数据库还是在别的地方?用的什么数据库,有很多数据库有触发器这种东西的。这种事情不用你轮询去读数据,效率低下,耗费大量系统资源!~
[/Quote]
何必这么较真呢.思路有没有问题不是你要关心的,LZ贴什么问题 能回答 就回答下,如果像你这样,LZ问个问题岂不是要把整个系统全发上来?...呵呵
路边一青蛙
2012-10-30
打赏
举报
回复
我看了你的原帖,你的数据是谁给你的,是不是自己的程序?数据是存放在数据库还是在别的地方?用的什么数据库,有很多数据库有触发器这种东西的。这种事情不用你轮询去读数据,效率低下,耗费大量系统资源!~
yonglaixiazaide
2012-10-30
打赏
举报
回复
肯定单独的线程的更好啊~
加载更多回复(11)
C#
Timer
的多
线程
使用方法
使用System.Threading.
Timer
使用System.
Timer
s.
Timer
分别举例这两个类来实现多
线程
的时钟,不会阻塞UI
线程
例子是Winform的
C# 的
timer
与
线程
有一次面试,面试官说卡顿怎么处理,我说多
线程
。多
线程
比
timer
好读。面试官说,开很多
线程
好吗?我说开
timer
好吗?
timer
实际上还是
线程
。好了,现在看看
timer
和
线程
的关系。
timer
有3种1.winform 下的
timer
。就是拖控件到UI上的那个
timer
. 源文件在这个路径下C:\Windows\Microsoft.NET\Framework64\v4.0.30319namesp...
Timer
定时任务是否是多
线程
1、
Timer
是多
线程
的吗?
Timer
启动一个任务,每隔1秒执行一次,一次任务执行需要5秒;那么第一次任务没执行完,第二次任务是如何执行呢? **结果:**
Timer
不是多
线程
的,遇到上面的情况,
Timer
会等待第一次任务执行完成,再开启第二次任务的执行。 2
Timer
的用法
Timer
是一种定时器工具,用来在一个后台
线程
计划执行指定任务。它可以计划执行一个任务一次或反复多次。
Timer
Ta...
java
timer
线程
_Java
线程
之
Timer
简述java.util.
Timer
是一个定时器,用来调度
线程
在某个时间执行。在初始化
Timer
时,开启一个
线程
循环提取TaskQueue任务数组中的任务,如果任务数组为空,
线程
等待直到添加任务;当添加任务时,唤醒
线程
,提取数组中标记为1的任务,如果该任务状态为CANCELLED,则从数组中删除任务,继续循环提取任务
Timer
Task
Timer
Task是一个抽象类,它实现了Runnable接口,我们...
java
timer
守护
线程
_Java的守护
线程
与非守护
线程
守护
线程
与非守护
线程
最近在看多
线程
的
Timer
章节,发现运用到了守护
线程
,感觉Java的基础知识还是需要补充。Java分为两种
线程
:用户
线程
和守护
线程
所谓守护
线程
是指在程序运行的时候在后台提供一种通用服务的
线程
,比如垃圾回收
线程
就是一个很称职的守护者,并且这种
线程
并不属于程序中不可或缺的部分。因 此,当所有的非守护
线程
结束时,程序也就终止了,同时会杀死进程中的所有守护
线程
。反过来说,只要任何非守护...
C#
111,097
社区成员
642,554
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章