环境 .net core 2.0 vs for mac
1 namespace t2 2 { 3 class Program 4 { 5 static void Main(string[] args) 6 { 7 var dd = new DisposeCls(); 8 dd.Dispose(); 9 dd = null; 10 GC.Collect(); 11 12 Console.ReadKey(); 13 } 14 } 15 16 public class DisposeCls : IDisposable 17 { 18 ~DisposeCls(){ 19 Console.WriteLine("call ~~~"); 20 } 21 22 public void Dispose() 23 { 24 Console.WriteLine("call dispose"); 25 } 26 } 27 }
上面代码只会输出 call dispose ,不会调用析构函数,求解
https://github.com/dotnet/corefx/issues/5205
会不会就是对象没释放.你在对象里弄一个定时器.定时输出.
看看回收后还会不会继续输出.
就是没释放,但是为什么呢,都已经去掉引用并且强制GC了
在 windows .net framwork 上能正常析构
@文艺的码农: 那就是内存回收机制不一样的.怎么不一样就不知道了
用using包起来能控制他一定被释放不?
@吴瑞祥: using 就是调用dispose
https://github.com/dotnet/corefx/issues/5205
换 1.1 试试,2.0 不可能有这么明显的问题吧。
1.1没有实现 Idisposeable接口
https://github.com/dotnet/corefx/issues/5205