我现在建立一个datatable,那么.NET在什么时候会回收这个datatable。
内存回收到底是怎么一个原理?
因为我现在遇到的问题是,在用户没有点击页面上的“保存”按钮时,他所作的所有有关数据操作都只是内存中的datatable而言的。

解决方案 »

  1.   

    当CLR注意到内存被占满时,便自动运行垃圾回收器,一旦垃圾回收器开始运行,它自动扫描内存,寻找任何种类的垃圾,并且重新排列,搜寻垃圾时“先搜寻最新分配的对象所在地点”。因为一般而言,最新分配的对象,会是最快成为垃圾的对象。
      

  2.   

    那我假设,半个小时前建立了一个datatable,并且对这个datatable做了很多操作,datatable的数据已经改变了,那半个小时后,它会不会被回收了?
      

  3.   

    .NET运行时采用的方法是无用存储单元收集器来回收内存,这是一个程序,其目的就是清理内存,它的方法是所有动态请求的内存都分配到堆上(对所有的语言都一样),当.NET检测到给定过程的对已经满了,修要清理,就调用无用存储单元收集器,无用存储单元收集器处理目前代码中的所有变量,检查对存储在堆上的对象的引用,确定哪些对象可以从代码中访问(既哪些对象有引用),没有引用的对象就不再能从代码中访问,因此被删除.
    无用存储单元收集器的一个重要方面是它是不确定的,也就是说,不能保证什么时候会调用它,.NET运行时决定需要它时,就调用它,显然,代码对内存的需求越多,它被调用的次数就越多.可以使用System.GC显式调用.
      

  4.   

    dragonforfly(飘零) 说的,我明白了点了!
      

  5.   

    哪些对象不再使用了?我一个datatable,现在不使用,我10分钟后使用,有没有这么回事了?
    是不是我对这个dataset存放在内存中的理解有错误了?
    还请大家赐教!
      

  6.   

    你怎样建立一个datatable,对这个datatable做操作,然后过半个小时再保存呢?看看你代码分析分析
      

  7.   

    谢谢了,不知道各位对dataset是存放在内存中 怎么理解的?我现在的理解是:你从数据库中取出一个datatable,你在insert,update,delete这个表的时,是在内存中一次性完成的,然后你再正式将数据提交到数据库中去!高手莫见笑,本人1是确实不懂,2是抱着学习的态度来的,所以还请各位赐教,谢谢了!
      

  8.   

    feiyang0721:我所说的只是我举的一个例子
      

  9.   

    .net是不需要用户干预吧,它自己会回收资源的。
    不知道是不是这样!
      

  10.   

    谢谢各位了,我现在想了解一下,各位对dataset是存放在内存中 怎么理解的?我现在的理解是:你从数据库中取出一个datatable,你在insert,update,delete这个表的时,是在内存中一次性完成的,然后你再正式将数据提交到数据库中去!而不是说一旦用new建立了一个datatable,那么这个datatable就永远存在内存中。
      

  11.   

    为了阐释如何进行更新,假设您的应用程序使用一个包含单个数据表的数据集。该应用程序从数据库中获取两行。在检索之后,内存中的数据表类似于下面这样:(RowState)     CustomerID   Name             Status
    (Unchanged)    c200         Robert Lyon      Good
    (Unchanged)    c400         Nancy Buchanan    Pendinghttp://msdn.microsoft.com/library/chs/vbcon/html/vbcondatabaseupdates.asp?frame=true
      

  12.   

    看一下第二书店里的.net框架程序设计(修订版)的第五章,那里写的非常详细.
      

  13.   

    垃圾回收器基础与性能提示:http://www.microsoft.com/china/MSDN/library/netFramework/netframework/NFdotnetgcbasics.mspx
      

  14.   

    http://www.microsoft.com/china/MSDN/library/netFramework/netframework/NFdotnetgcbasics.mspx