当前位置: 代码迷 >> .NET Framework >> DataTable disposed 以后,为什么 DataView 还有数据
  详细解决方案

DataTable disposed 以后,为什么 DataView 还有数据

热度:233   发布时间:2016-05-02 01:01:59.0
DataTable disposed 之后,为什么 DataView 还有数据?
DataView view = table.DefaultView;

table.disposed();

为什么 view 还有数据?

------解决方案--------------------
基本的常识问题。

Dispose()的作用是释放非托管的资源。同时向这个对象宣告,我不再使用你了。

它没有清除数据、自动销毁之类的作用。

在调用Dispose()之前,务必确保这个对象已经不再被使用。
------解决方案--------------------
探讨
DataView view = table.DefaultView;

table.disposed();

为什么 view 还有数据?

------解决方案--------------------
你的理解好像有些问题。一楼说的很明白Dispose()的作用是释放非托管的资源

而你所说的Dispose(boolean)是MarshalByValueComponent的一个function,的确可以选择性释放。
问题是你没有call Dispose(boolean),你call的 table.Dispose(); 而且table本身是不能call .Dispose(boolean)的, 它只能被重写。

table是托管资源,call了dispose并没有任何实质性的作用。一般情况下,托管资源在栈(gen0)满了以后自动释放。
------解决方案--------------------
你用的是dataset绑定到dataview中的吧,dispose只是释放数据库连接,会清空sqldatareader中的数据。dataset存储在客服端机器的内存中所以不能被释放的。
------解决方案--------------------
你帖出来片断代码 没有用啊 
C# code
// Implement IDisposable.// Do not make this method virtual.// A derived class should not be able to override this method.public void Dispose(){        Dispose(true);
------解决方案--------------------
你都移除了数据操作,怎么还会有数据……
------解决方案--------------------
探讨
......在与 GridView 数据源绑定,看看数据是不是还在

------解决方案--------------------
我只是指出你的疑问很可能是由于没有弄清楚对象生命周期,
你看看上面的讨论根本就没有意义,
(其实,对于dispose干什么,根本不用咬文嚼字,微软MSDN说的在明了不过了)
所以建议你贴出一个简单的demo来说明你的疑问,
看看我估计的是不是正确的,
然后你再来给我扣帽子
  相关解决方案