本帖最后由 zhix88 于 2009-06-16 22:35:26 编辑

解决方案 »

  1.   

    数据库缓存?我是否可以这样理解?
    读写频率低时,每次读写时会进行建立、清空缓存操作,而读写频率非常高时,第一次建立的缓存会重复使用,导致性能提高?
    那么我的服务端原来CPU占用率高的原因不是数据库读写语法问题,而是ADO建立、清空数据库缓存占用了较大CPU时间?
      

  2.   

    他这那有多线程缓存靠谱点access读取起来当然慢了这个属于小型桌面应用型的数据库啊很可能是缓存
      

  3.   


    如果您的解释正确,那么是否意味着,在酷睿双核处理器上使用VB软件时,只要给软件足够压力,VB软件就会自动成为多线程??
      

  4.   

    这我可不敢说 - -我只是猜测可能会有CPU调度产生...
      

  5.   

    C/S还是B/S ?
    C/S的活,连接方式是即用即连,还是长驻连接? 
      

  6.   

    没这回事,ls说的也有可能但是5ms就连接不管是即用即连,还是长驻连接 都不能减少资源调度吧
      

  7.   


    C/S,TCP长驻连接我这个小软件因为是用VB做的,刚开始用的时候受到了很多网吧内会点“电脑知识”的客人的白眼,说“用VB也敢做多人在线C/S软件,不可能长期稳定使用!”
    前几个月因为服务端性能问题,一直没敢大规模使用,只在一个250台机子的网吧测试,但除了服务端CPU占用较高外,没发现其他问题。这次解决了性能问题,我就用到其他网吧了,棒就一个字!
    我维护的多个网吧共两千多台机子,5天时间运行稳定,状态良好,使我对VB有了绝对的信心!
      

  8.   

    刚好什么啊,1-130为1段,131-250为2段,用双千兆网卡的代理转发数据
    唉,如果是几年前,250台机子完全不用分网段的,因为1代理,1电影+游戏,1收费机就OK了
    现在一堆“相关部门”强制给网吧装了各种管理软件,还一个软件必须单独一台服务器,IP就不够用了
      

  9.   

    马儿说刚好,指的是ACCESS吧?据说access2003及以前的版本,只能支持250个并发.....
    似乎楼主用了winsock吧?
      

  10.   


    access2003的“2003”指的是建立数据库的Microsoft Office Access版本还是Microsoft Access Driver版本还是别的什么?我用的就是winsock,VB做网络软件用winsock通信是否最好?
      

  11.   

    一点个人看法,winsock+access, 对于数据库系统来说实际上不是传统意义上的C/S结构,因为这种设计C端并不直接访问数据库,C端请求,S端访问数据库并进行业务逻辑处理后,返回数据到C,这样的形式更象B/S,这种构架对服务器的要求应该比较高的,同时又用了winsock,从维护角度看又远不如B/S...不过对于access来说,这样也是一种选择,毕竟access是桌面数据库...外人很难解释楼主描述的现象到底是什么原因,access理论上是可以接受200多个数据迸发的,实际情况怎么样可能和许多因素相关,加上winsock,Tiger_Zhao说的情况也有可能的,楼主还是要严格测试一下....
      

  12.   

    显然不可能压力过大了才会出现等待的情况而连接压力过大反而比连接压力小的时候cpu资源耗费少是什么理由?总是程序到达了一个上限才会出现这样的情况而原先的情况是在上限以前,那有上限以前比到达上限还耗费资源多的道理。
      

  13.   

    winsock在500ms下是不是每次请求都成功?特别是在双核的服务器上...好象winsock在个别双核机器上会有问题吧?反正我是遇到过,因为是个老程序,现在不用了,最近也没做winxock相关程序,所以也没抽时间仔细研究...不知道是不是只是个案....
      

  14.   

    你本机处理 250 个请求可能只要用 10% CPU;但是在相同的周期内可能只能将 50 个请求结果传送给客户端,所以实际平均每个周期只处理 50 个请求,CPU 耗用就降为 2% 了。
      

  15.   

    我懒得多解释自己想想有这样的事?一个是10秒一次一个是0.5秒一次你怎么抛弃结果也不可能是0.5的需求比10秒的少。比如有200台,10秒时请求是200个,0.5秒时请求就是4000个,你怎么个丢弃法能让4000个低于200个?真是人工智能啊?更何况这是常驻连接,如果是tcp的话,中途也不可能出现丢包弃包的情况。lz自己测试下吧如果把access抛弃掉winsock连接不可能是这个性能的瓶颈之处最关键的还是access是桌面数据库,如果换成mssql估计就不会有这样的区别了。
      

  16.   


    非常感谢各位大侠的关注,24号我把客户端工程复制到另一个文件夹,专门做了一个特殊客户端,就是将每次请求积分时的时间和返回的部分数据写入文本文件,挂了一天时间记录了5M多,我花了将近一个小时看了一下网吧人最多时的记录,12:30-2:30,20:00-22:00这两段时间积分软件在线率都超过230人,并没有任何请求失败的现象,每秒2条记录很整齐,返回的数据也是正确的,所以各位大侠猜测的500ms一次是否丢包是否定的。我的软件原理其实很简单的
    客户端登录时服务端记录该用户的当前登录时间,
    登录后客户端每隔500ms向服务端请求积分一次,
    服务端计算该用户的累计登录时间是否大于10分钟,
    如果大于,则增加一次积分并减去600秒累计登录时间,否则更新累计登录时间,
    服务端向客户端返回当前积分和当前累计登录时间。原来是客户端10秒向服务端请求一次,用了已经快4个月了,但服务端CPU占用率一直很高,前几天偶然改成500ms后服务端CPU占用率就很低了,偶尔会达到2%,一般都在0%和1%之间变化。
    困惑