none
我用datatable存放从数据库导出的数据,大家看看这个内存占用会不会太离谱? RRS feed

  • 问题

  • 一行数据大概22个decimal类型的字段,加上一个20个字节的string类型,一共14W多条数据,我看了一下程序的内存占用,大概是 内存:450M多 虚拟内存:460M多  这个内存占用会不会夸张了..

    我是从分批从数据库里查询数据,然后把查询到的数据填充到一个公用的DataTable对象里的

    2010年4月19日 4:07

答案

  • 我知道问题可能出在哪里了,应该是出在Datagridview控件上,显示太多条数据的缘故,我试了一下,就是填充数据的时候,不显示在datagridview控件上,算下来一条数据才占用0.7K左右...不过有个问题就是,为什么我窗体退出之后,占用的内存还没释放的?我在窗体的formclosing事件里面加了GC.Collect(0); GC.Collect(1);了啊?
    2010年4月19日 6:46

全部回复

  • 1.

    算一下纯数据理论上差不多是 (22*16+20)*14000/(1024*1024) = 50M,即使算上 Datatable 包含的元数据信息,450M 确实差距比较大

    不知道你到底如何实现的,还是试用了强类型 DataSet ?这样占用资源会更多

    2.

    此外,导入导出,一般不是用 DataTable ,而是使用 DataReader,边读边输出


    问题要简单,错误须详细@错误/异常/堆栈信息+操作系统+软件版本+all the context of the issue Hope Helpful | http://www.leoworks.net
    2010年4月19日 5:07
  • 我就是在服务器上,把一个对象注册成remoting,客户端去调用这个对象里面的一个方法,这个方法的作用是我传递一个sql语句,帮我查询出来,然后返回DataTable。我每次就只填充1000条而已啊。。。。。而且每次填充之后,还会把从remoting返回的那个DataTable对象清空然后调用一次dispose方法
    2010年4月19日 6:10
  • 我就是在服务器上,把一个对象注册成remoting,客户端去调用这个对象里面的一个方法,这个方法的作用是我传递一个sql语句,帮我查询出来,然后返回DataTable。我每次就只填充1000条而已啊。。。。。而且每次填充之后,还会把从remoting返回的那个DataTable对象清空然后调用一次dispose方法。。

    不过我有把一个datagridview的数据源绑定到datatable对象
    2010年4月19日 6:11
  • 我知道问题可能出在哪里了,应该是出在Datagridview控件上,显示太多条数据的缘故,我试了一下,就是填充数据的时候,不显示在datagridview控件上,算下来一条数据才占用0.7K左右...不过有个问题就是,为什么我窗体退出之后,占用的内存还没释放的?我在窗体的formclosing事件里面加了GC.Collect(0); GC.Collect(1);了啊?
    2010年4月19日 6:46