我想这是一个非常愚蠢的问题,但我一直在环顾四周,无法在以下问题上找到答案.真的很感激答案揭示了这一点.
1)如果在同一方法中实例化一个新对象,前一个对象会发生什么.例:
DataTable dataTable = new DataTable();
dataTable = new DataTable(); // Will the previously created object be destroyed and memory freed?
Run Code Online (Sandbox Code Playgroud)
2)与(1)相同的问题,但在静态变量上.例:
static private DataView dataView;
private void RefreshGridView()
{
dataView = new DataView(GetDataTable()); // Will the previously created objects be destroyed and memory freed?
BindGridView();
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
Ree*_*sey 11
//是否会销毁先前创建的对象并释放内存?
潜在的.一旦你这样做,你将不再持有对原始的引用DataTable
.只要没有其他内容引用此对象,它就有资格进行垃圾回收.在此之后的某个时刻,GC将运行,并收集对象,这将反过来释放它的内存.
静态,实例和局部变量都是如此.所有这些scnearios的机制都是相同的.
请注意,如果您引用的对象已实现IDisposable
,Dispose()
则在丢失引用之前调用它是一个好习惯.从技术上讲,正确实现的IDisposable
实现最终将处理正确的事情,但是本机资源可能会被捆绑,直到GC集合发生,这可能不会很快发生.请注意,这与(托管)内存无关,但仍然是一种很好的做法.
话虽这么说,你的第一个例子是一个不好的做法.虽然内存将(最终)得到清理,但您正在执行额外的分配,这些分配没有任何意义,因此最好不要"双重分配"变量.
归档时间: |
|
查看次数: |
958 次 |
最近记录: |