DataSet:鸡勒!鸡勒!有大型网站经验的朋友讨论一下 刚开始大部分数据载体都自然地选择了DataSet,上线后把内存++到2G都还不够用。无奈中,只有自己重新自定义数据集,继承CollectionBase。看到很多大型项目,根本很少采用dataset,也很少用datareader。哎。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 大型的数据用dataset11当然是不行的,用datareader好的多 相反,我觉得DataSet非常不错你要是觉得GC回收的慢可以操作完数据后将其中的数据清空 哦?可是看微软的两个示例都是用继承自DataSet的数据结构来传递数据的,应该不会有多大的性能问题吧(也许是我没做过大项目)这个DataSet可是.net极度鼓吹的,这么差劲?听听其它兄弟的高见. 大型网站?大型网站,你看过几个用动态显示的?几乎都是生成静态HTML了,如果你还是用动态直接读取,那肯定不是大型网站. 重新自定义数据集,继承CollectionBase。看到很多大型项目,根本很少采用dataset,也很少用datareader。哎。。没有用的英雄。你以为你的服务器是微软那台大家伙啊??人家拿大型机跑网站当然可以高兴高兴地用他的“mspx”。或者说你的网站并不“大型”。大型的基本都是静态页面的,要不买内存买死你也算了,CPU就要你命。还是硬盘方便,加完再加,价格便宜量又足,所以大型站点建议还是用静态的,买个大点的硬盘比加内存和升CPU要实际的多。 普通的页面是可以用.net的控件的,大型的生成html静态的就行了。要不然服务器那里受得了 不关DataSet的事拉,,,虽然DataSet量大的时候是比DataReader次一点大型,就应该生成静态.无论是啥 :p 有同感~ 我参与的一个站点,就是用很多dataset,而且没有用静态志强4cpu ,2G内存,内容上了1/3左右,吃了1G多内存。。 TO srz007(呵呵) :将dataset clear掉,内存并不是马上回收。 TO:sp1234() 我只是想把所遇到问题拿出来大家讨论讨论而已。 TO: hchxxzx(NET?摸到一点门槛) 我网站访问量最多部分已经全部生成HTML了。全站生成有一定困难。 DataSet 怎么不好,如果你对每个用户读建立一个dataset,大型网站肯定受不了,关键看你怎么使用,例如,缓存,单件,如果使用得当,当然没问题 to 楼主DataSet相当于内存中的数据库,你用clear清除里面的数据表后,内存中的数据就没了,至于你说的不马上回收,这个是由GC来决定的,但至少你用了clear后会马上把实际占用的内存减少很多,只保留一个空的DataSet来等着让GC回收啊 关键问题不在于DataSet,而在于缓存!如果你有好的缓存策略,很多东西并不需要往返多次,开头往返一两次取数据就行了,那就根本不需要太在乎DataSet的问题。如果有必要,你应该做一个东西检测一下每一个页面请求你的网站会调用多少句SQL创建多少个DataSet,而别人的高效网站又如何,然后继续优化你的网站。 呵呵大型的还是静态的好dataset的确很慢地 dataset能少用尽量不要不用你想想,本来读取数据就是表,你用dataset读出来又要重新生成一个表结构大型网站用的话不要说cpu了,就是内存也够受的了! 1. 大型网站应用不要使用dataset、服务器端控件。一句话按原有方式编程(混编,当然还是要分层)2. 新闻类似栏目可选用生成静态页面方式。总之asp.net新增的一切快速开发模型都不适用在大型网站上。 我基本上是用完就Dispose()销毁这个DataSet 这不是DataSet的问题,看你怎么用DataSet的,如果你在每一个页面都自己去连数据库的话,再好的服务器都会累死的。还是好好设计下体系结构,把各个层次分清楚。在数据库连接层进行好的设计和优化才能真正解决问题。 初学这个东西,估计很多人连问题都问不出来.思维一时转变不过来.按M$的例子(网上书店),所有数据都是使用DataSet操作的,中间(包含WEB及DATABASE)经过5层处理.而且,一个最为典型的记录插入操作就得从DataColumn到DataRow到DataTable再到DataSet一步步的对象实例建立并添加.所有所有的这些不知道是不是必须的,还是仅仅只是作为示例目的?另外,这些DataSet...操作的最后一层,也就是数据库层是通过调用存储过程完成的,因为有了DataSet的封装,存储过程的参数(特别是返回,输出参数)如何回传? 我们家乡有句粗话:人不日毛怪到钝…………你确定性能的瓶颈是DATASET导致的吗? 晕,DS是非常强的,只是要管理好DS内的内容,要不然内存当然不够用了! 没做过大型网站的就别乱评论~~~咱做过几个,每日pv 都是600w左右,没用生成静态页面Cache用的好的话,根本就没啥问题主要看你的经验与实现技术,别看了人家几片文章,说dataset如何如何就真的如何如何了,实践是检验真理的唯一标准,嘴巴上的东西永远都不能当真btw:用Cache的话,不用DataSet怎么行? 但无论怎么说,它都是一个断开的数据库,这对数据服务器本身是一种有利的机制.与ms所推的WebServer情投意合.你可以想像,大数量级的对数据库访问造成的后果可能更严重.不用说,它是个危险的东西.但可以通过在使用它前,进行良性的分析,如保证尽量使每个实例返回的数据是不同的.减少查询冗余,然后复用这些查询结果.另外,对大型的数据也可以分步返回,在最后需要的时候集合起来.可以说,它对程序员,特别是数据库设计者的要求更高了.符合社会进步的规律.以上是我的个人认为,请斧正. 用dataset读数据一定要只存放被分页后的数据,否则全部读取会很占资源 对于显示还可以,对于交互性比较大的情况,cache也不怎么好用了 DataSet能不用就不用。最好还是用DataReader,我用DataReader感觉特爽。速度一流。 1.用缓存.2.如果是分页就用存储过程只取小量数据显示.减少网络负担.3.多用OOP思想. 大型网站?大型网站,你看过几个用动态显示的?几乎都是生成静态HTML了,如果你还是用动态直接读取,那肯定不是大型网站.up 我感觉如果并发量大的时候,DataSet的效果比DataReader要好。DataSet是离线型的,而DataReader读取时一定要和数据库联接! 我认为最关键还是运用好缓存, 可以对同一页面实现不同版本的取和丢...所谓大型网站都是采用静态页面的方法, 实际上你们是被他用了障眼法, 据我所知都是采用urlwrite方法, 并不是真的HTML, 因为HTML管理的代价太大, 而且这种技术太老土, 尽管他确实可以大大改进服务器性能, 但哪是很.... >>>>所谓大型网站都是采用静态页面的方法, 实际上你们是被他用了障眼法, 据我所知都是采用urlwrite方法真的?我想看几个?能给出地址么? 对于大数据量当然要分页提取。数据库常识。用DataReader照样占内存。因为数据都是托管堆上分配的,等待微软为数据访问作特别优化吧。DataReader还有一点就是占用数据库资源太久,大量并发就会出问题了。 www.alibaba.com.cn就是其中的一个大型网站,大型的网站建议用静态页面! www.alibaba.com.cn是用的urlwrite,根本就不是什么静态页面,你看他速度快,他是硬件堆起来的,有多少像他那么有钱的 有些人喜欢自以为是自己拿ACT测试一下Duwamish再测试一下自己的程序性能 一般来说都是使用轻量级的datatable对象。不用重量级的dataset对象。只在webservice和xml上使用dataset。这样不能根本上缓解问题。可是占用内存却小一些了 用DataSet和DataTable没有大分别楼主所说的大型网站可能适用于ArrayList这类低级数据存储类强大的DataSet我也觉得不适于用来开发网站 DataTable也不能算是轻量级呀,有一些小公司用所谓的"实体类",ArrayList啊这些才是正宗的轻量级,我就真不明白,用所谓的"实体类"进行单条记录的操作还算有点作用,把他——妈的一堆实体类Add到"Arraylist"里面去真不知道是哪位高手想出来的,就喜欢在数据转换中浪费资源,还美其名曰"节省开支"(不懂得用就说人家的不是)这根本就是摒弃好的东西用不好用的东西 关于membership的问题(这是1个很傻的问题) ListBox的css设置在IE8以下的浏览器不生效!!!! 请教一个pointF()的问题 我在datagrid里用toshortdatestring 出错 考验大家的一个问题,很有挑战性的! 初学asp.net正在学习控件,没想到出师不利! 如何在GIF图片上生成水印? Attributes.Add 的问题 如何去掉attributes 整站源码 asp.net編程中使用web服務 性能上有沒有影響噹噹 哪位高手有SQL SERVER2000的report service正版的。 为什么我登陆到sqlserver老是包错
你要是觉得GC回收的慢可以操作完数据后将其中的数据清空
这个DataSet可是.net极度鼓吹的,这么差劲?听听其它兄弟的高见.
大型网站,你看过几个用动态显示的?几乎都是生成静态HTML了,如果你还是用动态直接读取,那肯定不是大型网站.
看到很多大型项目,根本很少采用dataset,也很少用datareader。哎。
。没有用的英雄。你以为你的服务器是微软那台大家伙啊??人家拿大型机跑网站当然可以高兴高兴地用他的“mspx”。或者说你的网站并不“大型”。
大型的基本都是静态页面的,要不买内存买死你也算了,CPU就要你命。还是硬盘方便,加完再加,价格便宜量又足,所以大型站点建议还是用静态的,买个大点的硬盘比加内存和升CPU要实际的多。
大型,就应该生成静态.无论是啥 :p
我参与的一个站点,就是用很多dataset,而且没有用静态
志强4cpu ,2G内存,内容上了1/3左右,吃了1G多内存。。
将dataset clear掉,内存并不是马上回收。
我只是想把所遇到问题拿出来大家讨论讨论而已。
我网站访问量最多部分已经全部生成HTML了。全站生成有一定困难。
DataSet相当于内存中的数据库,你用clear清除里面的数据表后,内存中的数据就没了,至于你说的不马上回收,这个是由GC来决定的,但至少你用了clear后会马上把实际占用的内存减少很多,只保留一个空的DataSet来等着让GC回收啊
大型的还是静态的好dataset的确很慢地
你想想,本来读取数据就是表,你用dataset读出来又要重新生成一个表结构
大型网站用的话不要说cpu了,就是内存也够受的了!
按M$的例子(网上书店),所有数据都是使用DataSet操作的,中间(包含WEB及DATABASE)经过5层处理.而且,一个最为典型的记录插入操作就得从DataColumn到DataRow到DataTable再到DataSet一步步的对象实例建立并添加.
所有所有的这些不知道是不是必须的,还是仅仅只是作为示例目的?
另外,这些DataSet...操作的最后一层,也就是数据库层是通过调用存储过程完成的,因为有了DataSet的封装,存储过程的参数(特别是返回,输出参数)如何回传?
咱做过几个,每日pv 都是600w左右,没用生成静态页面
Cache用的好的话,根本就没啥问题
主要看你的经验与实现技术,别看了人家几片文章,说dataset如何如何
就真的如何如何了,实践是检验真理的唯一标准,嘴巴上的东西永远都不能当真btw:用Cache的话,不用DataSet怎么行?
但可以通过在使用它前,进行良性的分析,如保证尽量使每个实例返回的数据是不同的.减少查询冗余,然后复用这些查询结果.
另外,对大型的数据也可以分步返回,在最后需要的时候集合起来.可以说,它对程序员,特别是数据库设计者的要求更高了.符合社会进步的规律.以上是我的个人认为,请斧正.
我用DataReader感觉特爽。
速度一流。
2.如果是分页就用存储过程只取小量数据显示.减少网络负担.
3.多用OOP思想.
大型网站,你看过几个用动态显示的?几乎都是生成静态HTML了,如果你还是用动态直接读取,那肯定不是大型网站.up
DataSet是离线型的,而DataReader读取时一定要和数据库联接!
这样不能根本上缓解问题。可是占用内存却小一些了