刚开始大部分数据载体都自然地选择了DataSet,上线后把内存++到2G都还不够用。无奈中,只有自己重新自定义数据集,继承CollectionBase。
看到很多大型项目,根本很少采用dataset,也很少用datareader。哎。

解决方案 »

  1.   

    大型的数据用dataset11当然是不行的,用datareader好的多
      

  2.   

    相反,我觉得DataSet非常不错
    你要是觉得GC回收的慢可以操作完数据后将其中的数据清空
      

  3.   

    哦?可是看微软的两个示例都是用继承自DataSet的数据结构来传递数据的,应该不会有多大的性能问题吧(也许是我没做过大项目)
    这个DataSet可是.net极度鼓吹的,这么差劲?听听其它兄弟的高见.
      

  4.   

    大型网站?
    大型网站,你看过几个用动态显示的?几乎都是生成静态HTML了,如果你还是用动态直接读取,那肯定不是大型网站.
      

  5.   

    重新自定义数据集,继承CollectionBase。
    看到很多大型项目,根本很少采用dataset,也很少用datareader。哎。
    。没有用的英雄。你以为你的服务器是微软那台大家伙啊??人家拿大型机跑网站当然可以高兴高兴地用他的“mspx”。或者说你的网站并不“大型”。
    大型的基本都是静态页面的,要不买内存买死你也算了,CPU就要你命。还是硬盘方便,加完再加,价格便宜量又足,所以大型站点建议还是用静态的,买个大点的硬盘比加内存和升CPU要实际的多。
      

  6.   

    普通的页面是可以用.net的控件的,大型的生成html静态的就行了。要不然服务器那里受得了
      

  7.   

    不关DataSet的事拉,,,虽然DataSet量大的时候是比DataReader次一点
    大型,就应该生成静态.无论是啥 :p
      

  8.   

    有同感~ 
    我参与的一个站点,就是用很多dataset,而且没有用静态
    志强4cpu ,2G内存,内容上了1/3左右,吃了1G多内存。。
      

  9.   

    TO  srz007(呵呵) :
    将dataset clear掉,内存并不是马上回收。
      

  10.   

    TO:sp1234() 
    我只是想把所遇到问题拿出来大家讨论讨论而已。
      

  11.   

    TO: hchxxzx(NET?摸到一点门槛) 
    我网站访问量最多部分已经全部生成HTML了。全站生成有一定困难。
      

  12.   

    DataSet 怎么不好,如果你对每个用户读建立一个dataset,大型网站肯定受不了,关键看你怎么使用,例如,缓存,单件,如果使用得当,当然没问题
      

  13.   

    to 楼主
    DataSet相当于内存中的数据库,你用clear清除里面的数据表后,内存中的数据就没了,至于你说的不马上回收,这个是由GC来决定的,但至少你用了clear后会马上把实际占用的内存减少很多,只保留一个空的DataSet来等着让GC回收啊
      

  14.   

    关键问题不在于DataSet,而在于缓存!如果你有好的缓存策略,很多东西并不需要往返多次,开头往返一两次取数据就行了,那就根本不需要太在乎DataSet的问题。如果有必要,你应该做一个东西检测一下每一个页面请求你的网站会调用多少句SQL创建多少个DataSet,而别人的高效网站又如何,然后继续优化你的网站。
      

  15.   

    呵呵
    大型的还是静态的好dataset的确很慢地
      

  16.   

    dataset能少用尽量不要不用
    你想想,本来读取数据就是表,你用dataset读出来又要重新生成一个表结构
    大型网站用的话不要说cpu了,就是内存也够受的了!
      

  17.   

    1. 大型网站应用不要使用dataset、服务器端控件。一句话按原有方式编程(混编,当然还是要分层)2. 新闻类似栏目可选用生成静态页面方式。总之asp.net新增的一切快速开发模型都不适用在大型网站上。
      

  18.   

    我基本上是用完就Dispose()销毁这个DataSet
      

  19.   

    这不是DataSet的问题,看你怎么用DataSet的,如果你在每一个页面都自己去连数据库的话,再好的服务器都会累死的。还是好好设计下体系结构,把各个层次分清楚。在数据库连接层进行好的设计和优化才能真正解决问题。
      

  20.   

    初学这个东西,估计很多人连问题都问不出来.思维一时转变不过来.
    按M$的例子(网上书店),所有数据都是使用DataSet操作的,中间(包含WEB及DATABASE)经过5层处理.而且,一个最为典型的记录插入操作就得从DataColumn到DataRow到DataTable再到DataSet一步步的对象实例建立并添加.
    所有所有的这些不知道是不是必须的,还是仅仅只是作为示例目的?
    另外,这些DataSet...操作的最后一层,也就是数据库层是通过调用存储过程完成的,因为有了DataSet的封装,存储过程的参数(特别是返回,输出参数)如何回传?
      

  21.   

    我们家乡有句粗话:人不日毛怪到钝…………你确定性能的瓶颈是DATASET导致的吗?
      

  22.   

    晕,DS是非常强的,只是要管理好DS内的内容,要不然内存当然不够用了!
      

  23.   

    没做过大型网站的就别乱评论~~~
    咱做过几个,每日pv 都是600w左右,没用生成静态页面
    Cache用的好的话,根本就没啥问题
    主要看你的经验与实现技术,别看了人家几片文章,说dataset如何如何
    就真的如何如何了,实践是检验真理的唯一标准,嘴巴上的东西永远都不能当真btw:用Cache的话,不用DataSet怎么行?
      

  24.   

    但无论怎么说,它都是一个断开的数据库,这对数据服务器本身是一种有利的机制.与ms所推的WebServer情投意合.你可以想像,大数量级的对数据库访问造成的后果可能更严重.不用说,它是个危险的东西.
    但可以通过在使用它前,进行良性的分析,如保证尽量使每个实例返回的数据是不同的.减少查询冗余,然后复用这些查询结果.
    另外,对大型的数据也可以分步返回,在最后需要的时候集合起来.可以说,它对程序员,特别是数据库设计者的要求更高了.符合社会进步的规律.以上是我的个人认为,请斧正.
      

  25.   

    用dataset读数据一定要只存放被分页后的数据,否则全部读取会很占资源
      

  26.   

    对于显示还可以,对于交互性比较大的情况,cache也不怎么好用了
      

  27.   

    DataSet能不用就不用。最好还是用DataReader,
    我用DataReader感觉特爽。
    速度一流。
      

  28.   

    1.用缓存.
    2.如果是分页就用存储过程只取小量数据显示.减少网络负担.
    3.多用OOP思想.
      

  29.   

    大型网站?
    大型网站,你看过几个用动态显示的?几乎都是生成静态HTML了,如果你还是用动态直接读取,那肯定不是大型网站.up
      

  30.   

    我感觉如果并发量大的时候,DataSet的效果比DataReader要好。
    DataSet是离线型的,而DataReader读取时一定要和数据库联接!
      

  31.   

    我认为最关键还是运用好缓存, 可以对同一页面实现不同版本的取和丢...所谓大型网站都是采用静态页面的方法, 实际上你们是被他用了障眼法, 据我所知都是采用urlwrite方法, 并不是真的HTML, 因为HTML管理的代价太大, 而且这种技术太老土, 尽管他确实可以大大改进服务器性能, 但哪是很....
      

  32.   

    >>>>所谓大型网站都是采用静态页面的方法, 实际上你们是被他用了障眼法, 据我所知都是采用urlwrite方法真的?我想看几个?能给出地址么?
      

  33.   

    对于大数据量当然要分页提取。数据库常识。用DataReader照样占内存。因为数据都是托管堆上分配的,等待微软为数据访问作特别优化吧。DataReader还有一点就是占用数据库资源太久,大量并发就会出问题了。
      

  34.   

    www.alibaba.com.cn就是其中的一个大型网站,大型的网站建议用静态页面!
      

  35.   

    www.alibaba.com.cn是用的urlwrite,根本就不是什么静态页面,你看他速度快,他是硬件堆起来的,有多少像他那么有钱的
      

  36.   

    有些人喜欢自以为是自己拿ACT测试一下Duwamish再测试一下自己的程序性能
      

  37.   

    一般来说都是使用轻量级的datatable对象。不用重量级的dataset对象。只在webservice和xml上使用dataset。
    这样不能根本上缓解问题。可是占用内存却小一些了
      

  38.   

    用DataSet和DataTable没有大分别楼主所说的大型网站可能适用于ArrayList这类低级数据存储类强大的DataSet我也觉得不适于用来开发网站
      

  39.   

    DataTable也不能算是轻量级呀,有一些小公司用所谓的"实体类",ArrayList啊这些才是正宗的轻量级,我就真不明白,用所谓的"实体类"进行单条记录的操作还算有点作用,把他——妈的一堆实体类Add到"Arraylist"里面去真不知道是哪位高手想出来的,就喜欢在数据转换中浪费资源,还美其名曰"节省开支"(不懂得用就说人家的不是)这根本就是摒弃好的东西用不好用的东西