Datatable.Dispose()是否从内存中删除?我正在研究非常简单的代码,并不断看到数据表的dispose()结果下面是代码DataTabledt=newDatatable();SqlCommandCmd=newSqlCommand("sp_getData",SqlCon);SqlCommand.CommandType=命令类型。程序;SqlCon.Open();sqlDataReaderdr=cmd.ExecuteReader();dt.负载(博士);SqlCon.Close();grdView.DataSource=dt;dt.Dispose()//在这里我处理了表格,因为它对我没有用并且想从中释放内存但是在处理数据表之后我仍然发现它仍然显示RowCount=10k。Dispose()方法不会释放内存并使对象为空吗?如何让它为空或释放这个对象占用的内存?DataSet和DataTable实际上没有任何非托管资源,因此Dispose()并没有做太多事情。DataSet和DataTable的Dispose()方法的存在只是因为继承的副作用——换句话说,它实际上并没有做任何对终结有用的事情。事实证明,DataSets、DataViews、DataTables在它们的构造函数中抑制了终结,这就是为什么对它们调用Dispose()显然什么都不做。据推测,这是因为,如上所述,他们没有非托管资源;因此,尽管MarshalByValueComponent允许非托管资源,但这些特定的实现不必这样做,因此可以放弃最终确定。这个巨大的答案总结道:毫无疑问,应该在任何Finalizable对象上调用Dispose。数据表是可终结的。调用Dispose可以显着加快内存回收。MarshalByValueComponent在其Dispose()中调用GC.SuppressFinalize(this)-跳过这意味着在回收内存之前必须等待数十个(如果不是数百个)Gen0集合。进一步阅读:请参阅此问题和相关答案。Dispose()方法不会释放内存并使对象为空吗?Dispose和dispose模式不是用于回收托管内存或“删除”托管对象(你不能做的事情以及垃圾收集器的用途),它是用于处置/释放非托管资源或其他托管可释放项目,例如SqlConnection。它当然不会使引用为空,但它可能会使其在配置转发时无法使用。如何让它为空或释放这个对象占用的内存?如果您想使引用为空,只需dt=null,但这不会给您带来任何好处,因为grdView.DataSource引用了DataTable实例。dt和grdView.DataSource都将引用相同的底层DataTable实例。我还怀疑它是dt无论如何都是方法范围的方法的一部分。你不应该太担心这些事情。我更关心在try-finally/using之外使用SqlConnection,您可以在其中打开连接。我倾向于在实现IDisposable的项目上调用Dispose,因为我认为这是一个很好的理由:这是一个公共契约。调用它有效的事实是一个实现细节,并且可能会立即发生变化。顺便说一句,我会完全重写你的代码:vardt=newDatatable();使用(varconn=newSqlConnection(""))使用(varcomm=newSqlCommand("sp_getData",conn)){conn.Open();使用(varreader=comm.ExecuteReader()){dt.Load(reader);}}grdView.DataSource=dt;尝试使用Clear()函数。这对我来说非常有用。以上是C#学习教程:Datatable.Dispose()会不会被内存删除?所有分享的内容,如果对你有用,需要了解更多C#学习教程,希望大家多多关注——DataTabledt=GetDataSchema();//填充dt,做任何事情...dt.Clear();本文整理自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
