我听说C#的垃圾回收器可以比它的VB.NET版本“更加积极”。这是真的吗?除了这个之外,在VB.NET和C#中垃圾回收运行的方式还有其他区别吗?
我听说C#的垃圾回收器可以比它的VB.NET版本“更加积极”。这是真的吗?除了这个之外,在VB.NET和C#中垃圾回收运行的方式还有其他区别吗?
CLR中的垃圾收集器是相同的。人们所指的差异可能在于语言的语法结构。在VB.NET中,您可能会有语言结构,导致对象引用意外地挂起更长时间,导致对象不能像在C#中那样尽早成为GC-eligible。不过,这只是猜测。
http://msdn.microsoft.com/en-us/library/ee787088.aspx#workstation_and_server_garbage_collection
Sub Overrides Finalize()
来覆盖Object.Finalize()
。该程序中的任何代码都将覆盖Object.Finalize
。在C#中,禁止覆盖Object.Finalize()
。相反,必须使用一种语法结构,讽刺的是称为“析构函数”(即使它防止对象在本应立即被销毁时被销毁),它使用以下内容覆盖Finalize()
:
override void Finalize(void) { try { .. supplied code here } finally { base.Finalize(); } }该语言结构的目的是使终结器代码具有平台无关性。实际上,这只是一个愚蠢的麻烦,因为任何使用终结器的正确代码都必须使用特定于平台的方法,如
GC.KeepAlive()
和GC.SuppressFinalize()
。