CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

定时器对系统资源的消耗大不大?

楼主leonlux(堂郎)2005-04-03 11:06:41 在 .NET技术 / C# 提问

我想做个c/s系统(类似于IM)。其中服务器和客户端不面向连接,服务器为每个客户端提供一个定时器,客户端定时向服务器发送“在线”消息,服务器更新定时器;若定时器超时,则服务器认为客户端已下线。现在就有一个问题,如果客户端很多的话,那服务器也相应会产生很多个定时器,这样会不会很消耗系统资源?如果是,请问有没有什么好的设计方法或算法,谢谢。 问题点数:100、回复次数:20Top

1 楼wolfofsky(风之武)回复于 2005-04-03 11:41:25 得分 10

使用一个定时器即可完成此任务Top

2 楼karykwan(独行者)回复于 2005-04-03 11:44:32 得分 0

应该不大,不知QQ是如何做的.像现在统计在线时间...Top

3 楼gdami(糖米)回复于 2005-04-03 11:46:20 得分 0

现在是面向对象编程了。    
  那用每个客户端一个。Top

4 楼flyhover(飞翔)回复于 2005-04-03 11:52:17 得分 0

upTop

5 楼leonlux(堂郎)回复于 2005-04-03 12:03:08 得分 0

to:wolfofsky(风之武)   ,一个定时器怎么做?  
  to:   gdami(糖米)   ,面相对象和一个客户端用一个定时器有什么矛盾吗?Top

6 楼hwxnhk0326(殺殺人,灌灌水)回复于 2005-04-03 12:03:26 得分 45

最好,全部通过客户端来完成!  
  客户端每隔一段时间比如(20秒)发“我在线”的消息给服务器,服务器登记一下接收到消息的时间。  
  客户端要查看   其他客户端是否在线   的话就查找一下服务器上登记的时间,如果登记时间和当前时间相差30秒则该用户不在线,如果小余30秒则在线!Top

7 楼leonlux(堂郎)回复于 2005-04-03 12:46:53 得分 0

to:hwxnhk0326   ,但是如果客户下线,服务器要进行相应的清理操作,所以服务器必须要知道客户端是否已经下线。在正常情况下,客户端下线时会发一个“下线”消息到服务器的。Top

8 楼flyhover(飞翔)回复于 2005-04-03 14:10:09 得分 35

即使客户端不发送“下线”消息到服务器(肯定会经常发生),只要服务有一定时器,每30秒检查一遍所有客户端最近一次发“我在线”时间是否小于30秒,大于30秒的客户端就已下线,服务器对其进行下线处理。Top

9 楼gdami(糖米)回复于 2005-04-03 18:10:27 得分 0

flyhover(飞翔)   说得很清楚了。   服务器只要一个定时器。    
  Top

10 楼leonlux(堂郎)回复于 2005-04-03 21:59:10 得分 0

to:flyhover(飞翔),我曾经想过你的想法,虽然在单线程的环境可以很好运作,但是在多线程环境处理起来就很麻烦。因为正常“上线”,“下线”的事件处理和清理“伪下线”的操作都要使用同一个“用户状态表”,很难做到同步而又不失性能。Top

11 楼lucbesson(女娃哈哈)回复于 2005-04-03 22:28:46 得分 0

http://community.csdn.net/Expert/topic/3897/3897755.xml?temp=.7407953  
  帮忙顶一下   我结帖Top

12 楼hwxnhk0326(殺殺人,灌灌水)回复于 2005-04-04 11:58:20 得分 0

没有必要发送下线通知啊,只要检查它的登记时间大于30秒的话就认为该客户端已经下线了。Top

13 楼leonlux(堂郎)回复于 2005-04-05 09:28:19 得分 0

还有一个问题,定时器到底对系统资源的消耗大不大?Top

14 楼hwxnhk0326(殺殺人,灌灌水)回复于 2005-04-08 18:55:41 得分 0

单单一个定时器应该占不了多少资源吧。主要是看你定时处理的事务所占的资源多不多。还有你定时器的频率。如果在线用户很多的话,系统开销就变成一个很大的问题了。  
  你是想实现成像QQ一样的吗?Top

15 楼leonlux(堂郎)回复于 2005-04-08 20:45:19 得分 0

不能说能象QQ一样,至少百来人在线应该是要可以应付的啊。Top

16 楼broadury(marvel)回复于 2005-04-08 20:58:28 得分 10

我认为不是timer本身消耗的资源大不大,而是每次timer触发事件的开销大不大。  
  只要触发事件的间隔不太小,每次事件触发的开销不太大,应该就可以了。  
  当然,timer的数量不要太多了Top

17 楼jb303(sleepingboy)回复于 2005-04-09 00:23:35 得分 0

应该想办法只用一个定时器,thinking  
  感觉只需要一个,flyhover(飞翔)的办法也不错啊Top

18 楼thundersoft(神州春雷)回复于 2005-04-09 11:51:17 得分 0

定时器,mark:)Top

19 楼niunj(南航牛)回复于 2005-04-09 12:00:02 得分 0

可以作成静态的    
   
      可以用定时器组建做     也可以用线程中的timer做Top

20 楼xiaomatian(趴趴熊◎%#……※×)回复于 2005-04-09 13:39:36 得分 0

关注Top

相关问题

  • 怎样做一个定时器?我有很多资源控制,每个资源控制都要有定时器
  • api(定时器)??
  • 系统慢,资源消耗低,郁闷!
  • 关于定时器
  • 定时器问题!!!
  • 定时器问题。。。。。。
  • 定时器问题...
  • 求一定时器
  • 定时器问题
  • 定时器问题!!

关键词

  • 服务器
  • 客户
  • 系统
  • 消息
  • 用户
  • 定时器
  • 下线
  • 客户端
  • 消耗
  • flyhover

得分解答快速导航

  • 帖主:leonlux
  • wolfofsky
  • hwxnhk0326
  • flyhover
  • broadury

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo