日期:2014-05-20  浏览次数:20884 次

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来说明你的疑问,
看看我估计的是不是正确的,
然后你再来给我扣帽子