2010-08-11 121 views
0

我想了解的对象在.NET世界中创建为反对在非托管代码环境(VB6等).NET对象生命周期寿命VS非托管代码

从我的理解时,通过使用新的keyowrd来创建一个对象,让它说C#,将引用变量放置在托管堆中,直到垃圾收集器采取主动措施检查对象是否仍然有对其的引用。如果不是,它会被销毁。这是否意味着GC始终在运行?这不是一个昂贵的过程?

有人可以解释更好吗?

这在umnanaged代码environemnt中有何不同?

回答

1

GC不会连续运行。它按需运行,这意味着如果不首先释放内存,则无法填充内存请求。所以不,这不是一笔巨大的开支。在服务器端,它可以在后台运行。 (我似乎记得这将会扩大,现在有更多的多核系统可用?)

对于大多数应用程序,GC对非托管代码是一个巨大的改进。没有引用计数,也不需要跟踪可能需要释放对象的所有路径。当它不再被引用时,它变得可收集。这极大地简化了编码,并且内存泄漏几乎(不完全)是过去的事情。

+0

+1,但服务器GC不*在后台运行。 – 2010-08-11 13:14:15