用C#做的一个ASP.ENT查询页面,查询结果为200万条记录左右的数据量,将结果用GridView控件显示,但是在点击查询后,过了一会w3wp.exe 占用内存资源高达800多兆,查询页面就一直停在,请高手帮忙,告诉下是什么原因,怎么解决?谢谢!!!

解决方案 »

  1.   

    结果为200万条记录左右的数据量,将结果用GridView控件显示
    ————————————————————————————————————————
    还有这么干的?200万记录一次显示出来,谁能用眼睛读?即使能读,也可以在将滚动条滚动到底部的时候才逐步分页输出。
      

  2.   

    200万条记录,用dataview就是一起装入内存,一条占用0.1K*200万??
      

  3.   

    w3wp占资源是正常的!,
    不过分页也要注意
      

  4.   

    200万条记录,用dataview就是一起装入内存---是这样的吗?那我查询出来的是个DataSet,肯定得会存到内存里呀?
      

  5.   

    不要用dataset分页,利用存储过程分页。只取pagesize条数据。另:不要让他查到200w条数据。
    没有任何意义,一天都看不完。
      

  6.   

    因为取得的200w条数据是从更大量的几个数据表里花了一分多钟查询出来的,如果采用只取pagesize条数据,每次都要再去更大量的几个数据表里查询数据,因该会话很长时间吧???
      

  7.   

    那你不如建临时表好了,也比web服务器慢好啊
      

  8.   

    我是把查到的数据(dataset形式)作为GridView控件的数据源,在GridView控件上允许分页,采用默认每页显示10条记录的分页方式.我不太清楚的是--是因为200w条数据存在dataset里占用了大量的内存而出现w3wp.exe 占用内存资源高达800多兆?还是因为GridView控件存有200w条数据在呈现的过程中出这样的问题?
      

  9.   

    情况是这样:
    ASP.NET查询程序放在A服务器,数据放在B服务器,用户访问ASP.NET网站查询数据,则数据是从B服务器中查询并返回给A服务器上的ASP.NET查询程序(返回一个dataset),然后ASP.NET查询程序再通过GridView控件显示给用户.
    但是现在用户在点击查询后,过了一会w3wp.exe 占用内存资源高达800多兆,查询页面就一直停在,更本没有任何查询结果出现?我想知道是什么原因造成的?有什么解决办法?或者高手有什么更好的办法?
      

  10.   

    是因为200w条数据存在dataset里占用了大量的内存而出现w3wp.exe 占用内存资源高达800多兆
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~
    因为GridView控件创建一次就销毁一次,所以它其实占不了多少内存,你的dataset肯定在服务器上有保存的吧?
      

  11.   

    情况是这样:
    ASP.NET查询程序放在A服务器,数据放在B服务器,用户访问ASP.NET网站查询数据,则数据是从B服务器中查询并返回给A服务器上的ASP.NET查询程序(返回一个dataset),然后ASP.NET查询程序再通过GridView控件显示给用户.
    但是现在用户在点击查询后,过了一会w3wp.exe 占用内存资源高达800多兆,查询页面就一直停在,更本没有任何查询结果出现?我想知道是什么原因造成的?有什么解决办法?或者高手有什么更好的办法?
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~那就有可能改为存储过程分页主要还要看你的业务是怎么样的
      

  12.   

    现在要做的是个通用的查询系统(也就是ASP.NET查询程序放在A服务器),在后台做好一定设置,并给用户定一些可选择的查询字段,然后给用户在前台查询页面自己用查询字段组合查询条件,后台自动生成最终的查询语句,然后向B服务器查询数据,将查询结构返回给A服务器,因为要保持通用性,所以只有再很复杂的查询才打算单独写存储过程
      

  13.   

    你的dataset肯定在服务器上有保存的吧?--我不太明白你的意思,我的代码大概是等同下面:
    DataSet ds = db1.GetDataSet();(获得数据结果)
     gvResult.DataSource = ds.Tables[0].DefaultView; (gvResult是GridView控件)
     gvResult.DataBind();
      

  14.   

    现在要做的是个通用的查询系统
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    刚好,我也在做,不过是OLAP的DataSet ds = db1.GetDataSet();(获得数据结果)
     gvResult.DataSource = ds.Tables[0].DefaultView; (gvResult是GridView控件)
     gvResult.DataBind();
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    第一,你的页面不会很大?
    第二,你仍然是每次都查询的
      

  15.   

    我就不知道是不是页面太大而出现这样的问题.
    不是每次都查询呀,不是就查一次,本打算把它存进Cache的(当时没考虑到有这么多数据),然点分页的时候就可以从Cache里提取出来.现在连第一次查询都不能成功返回数据,所以也还没到考虑大数据量因该采取什么方案的时候,你有什么好办法吗?