程序中使用的timer数量问题?

gotopower 2009-12-28 10:03:28
sql server2000数据库中有20张表,每张表中的记录都在增长,大概为每分钟10-50条,现在我需要在前台编写一个程序,实时读取数据表中新增加的记录,想法是使用System.timer计时器,每10秒钟读取一次数据库,取出数据,现在的问题是我应该使用一个timer,添加20个elapsed事件对各表进行操作(已做防止重入),还是使用20个timer分别对每张表进行操作?如果当系统中有20个timer同时运行的时候,长时间运行(几个月)程序的稳定性如何?望大家指点,谢谢
...全文
403 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
qldsrx 2009-12-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 gotopower 的回复:]
谢谢楼上几位,我想知道多个timer在长期运行(几个月甚至几年)的过程中稳定性如何?在程序逻辑没有问题的时候它会不会自己宕掉?
[/Quote]
稳定性不会有问题的。

[Quote=引用 5 楼 gotopower 的回复:]
还有就是对于一个timer中定义的多个elapsed事件,它们被触发执行的时候是单线顺次执行还是多线程并发执行呢?
[/Quote]
相当于你添加一个elapsed事件,把所有方法写在一起执行。它的好处是方便组件编程,部分常用事件可以集成到特定的组件中,同时又支持用户新增事件。除此之外和使用委托来执行没差别,不用到组件编程的话,可以不考虑使用那个Timer,使用System.Threading.Timer来操作。
longhair9711 2009-12-28
  • 打赏
  • 举报
回复
一个timer,然后用存储过程获取20张表
cuike519 2009-12-28
  • 打赏
  • 举报
回复
这个用得着这么设计么?

不就是要获得新数据么?给数据上添加一个字段IsNew不就完了么?新写入未读取的IsNew为ture,读过的设置为false下次不再读取。。。
abcdef1111111 2009-12-28
  • 打赏
  • 举报
回复
帮顶
十八道胡同 2009-12-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 gotopower 的回复:]
谢谢楼上几位,我想知道多个timer在长期运行(几个月甚至几年)的过程中稳定性如何?在程序逻辑没有问题的时候它会不会自己宕掉?
[/Quote]
这个我没经验,帮顶
gotopower 2009-12-28
  • 打赏
  • 举报
回复
顶上
gotopower 2009-12-28
  • 打赏
  • 举报
回复
结贴,谢谢大家帮助
love20203 2009-12-28
  • 打赏
  • 举报
回复
没有基础可以学C#语言吗
gotopower 2009-12-28
  • 打赏
  • 举报
回复
还有就是对于一个timer中定义的多个elapsed事件,它们被触发执行的时候是单线顺次执行还是多线程并发执行呢?
gotopower 2009-12-28
  • 打赏
  • 举报
回复
谢谢楼上几位,我想知道多个timer在长期运行(几个月甚至几年)的过程中稳定性如何?在程序逻辑没有问题的时候它会不会自己宕掉?
波导终结者 2009-12-28
  • 打赏
  • 举报
回复
用一个存储过程直接返回20个表,一个DataSet装进20个DataTable中就行了
liherun 2009-12-28
  • 打赏
  • 举报
回复
用多个timer
silentwins 2009-12-28
  • 打赏
  • 举报
回复
后者吧

前者并发的时候,不知道会不会有问题耶...
qldsrx 2009-12-28
  • 打赏
  • 举报
回复
其实这个同步可以自己写SQL语句,定时执行,没必要用中间件,除非钱多。

不建议使用代理作业方式完成,稳定性很成问题,比如代理关闭了啊,代理执行日期错误啊,虽然这些错误可以查看作业日志,但是作业日志的查看是很麻烦的事,而且不是人人有这个权限看的,不便于及时发现问题。所以作业方式不可取,只能凑合着用用。
gotopower 2009-12-28
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 wssdocn 的回复:]
楼主最终的目的是想数据同步对吧,假定本地是sql2k,远程是oracle。
你的想法是,写一个winform程序,利用定时器读取本地的数据,然后同步到远程的数据库。
而我上面的说法是不用写这个winform程序,即数据库对数据库直接操作:
你可以在sql2k本地,写这个存储过程。
首先sql2k是可以通过添加链接服务器(即添加远程oracle数据库)来操作远端数据库数据的;然后用存储过程完成数据同步过程(的主要内容就是数据处理了:包括判断更新哪些数据、数据同步,已同步数据的标记的等);最后,添加定时作业,sql2k的作业是可以重复到秒的。另外建议用作业方式,这样能够更节省主机资源。

这里要注意到几点:1,要确保作业执行用户对表的具有操作权限;2,sql2k下添加链接服务器,因为远端是oracle,故应该首先在本地安装oracle的客户端。



[/Quote]
谢谢耐心解答,这个方法确实不错,直接利用数据库功能实现,但是现在估计我只能用写程序的方法完成了,因为1.除了本地的sql2000,还有其他两个地方的两个SQL2000数据库的数据也要同步到远端的oracle中,即3个数据库的数据要传输到一个oracle数据库中,不知道这样同步是够可行2.公司已经采购了消息中间件产品。。。,总之,非常感谢,
O记DBA 2009-12-28
  • 打赏
  • 举报
回复
楼主最终的目的是想数据同步对吧,假定本地是sql2k,远程是oracle。
你的想法是,写一个winform程序,利用定时器读取本地的数据,然后同步到远程的数据库。
而我上面的说法是不用写这个winform程序,即数据库对数据库直接操作:
你可以在sql2k本地,写这个存储过程。
首先sql2k是可以通过添加链接服务器(即添加远程oracle数据库)来操作远端数据库数据的;然后用存储过程完成数据同步过程(的主要内容就是数据处理了:包括判断更新哪些数据、数据同步,已同步数据的标记的等);最后,添加定时作业,sql2k的作业是可以重复到秒的。另外建议用作业方式,这样能够更节省主机资源。

这里要注意到几点:1,要确保作业执行用户对表的具有操作权限;2,sql2k下添加链接服务器,因为远端是oracle,故应该首先在本地安装oracle的客户端。




gotopower 2009-12-28
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 mjp1234airen4385 的回复:]
你执意要这么做,我只能说,不会有问题。
[/Quote]
谢谢,可能是我头一次做项目,想法比较浅一些,有好的建议吗?
mjp1234airen4385 2009-12-28
  • 打赏
  • 举报
回复
你执意要这么做,我只能说,不会有问题。
huwei001982 2009-12-28
  • 打赏
  • 举报
回复
20 个 Timer 也没关系的
gotopower 2009-12-28
  • 打赏
  • 举报
回复
顶一下,大家有好的建议吗
加载更多回复(10)

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧