vb.net和c#的垃圾收集器有什么不同吗

本文关键字:什么 收集器 net vb | 更新日期: 2023-09-27 18:27:28

我听说c#垃圾收集器可能比vb.net的同类垃圾收集器"更具攻击性"。这是真的吗?与c#相比,vb.net中垃圾回收的运行方式还有其他区别吗?

vb.net和c#的垃圾收集器有什么不同吗

我的理解是CLR维护垃圾收集,并且不是特定于语言的。

CLR中的垃圾收集器是相同的。人们所指的差异可能在于语言的语法。在VB.NET中,语言结构可能会导致对对象的引用意外地停留更长时间,从而导致对象早在C#中就不符合GC条件。不过这都是猜测。

垃圾收集器是公共语言运行时(CLR)的一部分,它在使用CLR的所有语言之间提供内存管理,它不是特定于语言的。

C#和VB的垃圾收集器没有区别。这是CLR的一部分,在所有语言中共享。但是,运行在服务器上的垃圾收集器与运行在工作站上的垃圾回收器之间存在差异。

http://msdn.microsoft.com/en-us/library/ee787088.aspx#workstation_and_server_garbage_collection

垃圾收集器本身也是一样的。然而,在处理终结器的方式上存在差异。在vb.net中,可以通过简单地声明Sub Overrides Finalize()来覆盖Object.Finalize()。该例程中的任何代码都将覆盖Object.Finalize。在C#中,禁止重写Object.Finalize()。相反,必须使用一种语法结构,具有讽刺意味的是,它被称为"析构函数"(即使可以防止对象在其他情况下立即被销毁),它用以下内容覆盖Finalize()

覆盖void Finalize(void){尝试{..此处提供代码}最后{基础Finalize();}}

语言构造的假定目的是使最终代码独立于平台。在实践中,这只是一个愚蠢的麻烦,因为任何正确使用终结器的代码都必须使用特定于平台的方法,如GC.KeepAlive()GC.SuppressFinalize()