最近在改版一个高并发 高数据量查询 写入的网站。   以前的问题是 频繁的读写数据库 导致显示缓慢.  后来采用了 静态的dataset 保存需要查询的表。然后通过 table.select()取数据.然后再走流程! 本地调试 完美高质量.  可是今天一放到服务器上,服务器马上死机..cpu 维持在100% 。 虽然以前的那个慢 但是并不会大量的占用CPU 。我就没搞懂为什么 频繁的读取内存 比频繁的读取 数据库 还耗费cpu资源?  到底是那块在耗费CPU资源呢? 各位有什么好的方法 或者意见可以提提吗? 谢谢了~

解决方案 »

  1.   

    没有人知道吗? 刚才我改了下程序 使用了 Cache来缓存 dataset  每个来访的 去实例化一个 ds 不去调用静态的了..但是 效率好像没怎么提高! 求解啊~
      

  2.   

    速度慢,cpu少,这个典型的锁表造成的。写入数据库的时候太慢,读取的操作全部得等待。数据库设计考虑不周,不过找个高手改改,就可以搞定了。用 DataSet 冒充数据库,这个是馊主意。它没使用到索引,性能肯定不如数据库高,要不然数据库怎么敢卖那么贵?
      

  3.   

    回楼上的, 数据库设计得 其实很简单.. 该优化的 能优化的 我们都做了..但主要是数据量太大了,并发也太大了..每天往数据库写入的数据都超过了1亿条!,还不算读取和更新... 我为什么会用daaset呢 就是减少读取数据库的时间..然后定期写入.. 难道这个不是解决的办法吗?
      

  4.   

    对于那些可以不需要太严格的查询可以使用
    select * from dbo.TopWinCMS_Article nolock where id =100
    来避免锁表。
      

  5.   

    难道是我思路错了? 还是 dataset无用武之地. 我觉得静态的ds 只负责读取,里面就3w条数据左右.应该不会费太多的时间啊.. 纠结啊!!
      

  6.   

    天啊,每天一亿,你们公司就雇个专门搞这种的人吗?几句话也说不明白。用DataSet 来读写,本来性能就不好,起码得用泛型。还有,写入数据库的时候,循环添加的话,还是跟以前不用DataSet一样。
      

  7.   

    真强啊  用静态的 dataset  
      

  8.   

    数据库优化基本功我们已经做了,能避免锁表的我们都处理了..但是还是很慢,同一个程序 如果放到访问少的地方就一切正常。说明延迟还是在数据库本身上. 所以我进而想到了 定期的去读写数据库 减少数据库的压力.. 静态的dataset 为什么不能用呢? 我就是要在内存里面固定的位置去放数据 然后这个数据我只是为了读取,并不去写入修改.所以用静态的并不会影响什么.现在的问题是CPU占用奇高,我想的话是不是并发访问静态的变量都需要排队???
      

  9.   

    用linq去查table的数据 会不会效率提高??
      

  10.   

    系统性能提升之道--内存镜像表  刚才我看了下 http://www.cnblogs.com/tintown/archive/2005/03/23/124395.html  解决访问的方法我和我差不多 
     
     可是还是没解决CPU 过高问题!!
      

  11.   

    LINQ只是语法糖,可以较大地提高开发效率和代码的易读性,最终都会被编译为IL代码
    所以不一定能提高性能,相反,如果滥用,可能会降低性能
      

  12.   

    上午的问题 基本解决了~ 用缓存+实例化 能代替静态的 dataset ..不过现在又麻烦的问题.我要保存访问者的IP 第二次访问就自动跳转..每天大约有上百万的IP访问.我如果用 静态的dataset 记录的话  势必会越来越慢..以前记录IP 都是用的缓存 每个用户建一个缓存  可是这种缓存 丢失严重 基本2个小时就过期了..各位用什么办法 记录IP 高效又 便捷呢??