62,046
社区成员
发帖
与我相关
我的任务
分享
static void Main(string[] args)
{
var ds = new DataSet();
var wf = new WeakReference(ds);
ds = null;
GC.Collect();
ThreadPool.QueueUserWorkItem(h =>
{
Thread.Sleep(100);
if (!wf.IsAlive)
Console.WriteLine("dataset 已经被释放。");
});
Console.ReadKey();
}
这里模拟的你不再使用ds变量之后,当GC启动 Collect 后的情况。
自动进行GC.Colloct() 的调用频率非常高,几秒钟就会调用,至多20几年也会被许多机制分别调用多次。static void Main(string[] args)
{
var ds = new DataSet();
var wf = new WeakReference(ds);
ds = null;
ThreadPool.QueueUserWorkItem(h =>
{
Thread.Sleep(100);
Console.WriteLine("dataset 已经被释放。");
});
Console.ReadKey();
}
可见不出100毫秒(实际上更短时间),ds 引用的对象就已经被释放掉了。
在你的应用中,只要是 ds 引用的对象确实已经没用了,那么 GC 也是一样迅速地找到它并且处理它的。