Mik*_*ike 34 c# garbage-collection object new-operator
我想知道一旦对象被重新分配,对象(在C#中)会发生什么.例:
Car c = new Car("Red Car");
c = new Car("Blue Car");
Run Code Online (Sandbox Code Playgroud)
由于引用被重用,垃圾收集器在失去引用之后是否处理/处理'Red Car'?或者是否需要采用单独的方法来处理"红色汽车"?
我主要想知道因为我将要回收一个相对较大的对象,并且需要知道在重新创建时是否还有任何应该完成的事情.
Ric*_*ett 36
在您的示例中,将在分配时将符合垃圾收集条件的Red Car实例.你不需要做任何事情.ccBlue Car
查看有关.NET垃圾收集器的这篇(旧的,但仍然相关)MSDN文章.http://msdn.microsoft.com/en-us/magazine/bb985010.aspx
第一段说明了一切:
Microsoft .NET公共语言运行时环境中的垃圾收集完全免除了开发人员跟踪内存使用情况并知道何时释放内存.
use*_*116 33
由于引用被重用,垃圾收集器在丢失它的引用之后是否处理/处理'Red Car'?
你可能以错误的方式看待这个:
c [*] ----> [Car { Name = "Red Car" }] // Car c = new Car("Red Car")
Run Code Online (Sandbox Code Playgroud)
然后你的下一步:
c [*] [Car { Name = "Red Car" }] // No chain of references to this object
\------> [Car { Name = "Blue Car" }] // c = new Car("Blue Car")
Run Code Online (Sandbox Code Playgroud)
GC将会出现并"收集"任何这些对象,这些对象在将来的某个时刻没有对活动对象的引用链.对于大多数任务,只要您使用托管数据,就不必担心大对象与小对象.
对于大多数任务,您只需要在处理时担心确定性内存管理IDisposable.只要你遵循using-blocks 的最佳实践,你通常会没事的.
当垃圾收集器不再生根(无法访问)时,垃圾收集器将处理红色汽车的清理.开发人员通常不必担心在.Net中清理内存.
需要提到三个警告:
using说法是做到这一点的好办法.