我试图了解如何在.Net世界中创建对象,而不是在非托管代码环境(VB6等)中创建对象
根据我的理解,当使用新的keyowrd在C#中创建一个对象时,引用变量放在托管堆中,直到垃圾收集器采取主动措施来检查对象是否仍然引用它。如果没有,它就会被摧毁。这是否意味着GC始终在运行?这不是一个昂贵的过程吗?
有人可以更好地解释一下吗?
这在umnanaged code environemnt中有何不同?
答案 0 :(得分:1)
GC无法连续运行。它按需运行,这意味着如果没有先释放一些内存,就无法填充内存请求。所以不,这不是一笔巨大的开支。在服务器端,它可以在后台运行。 (我似乎记得这会扩大,现在可以使用更多的多核系统吗?)
对于大多数应用程序,GC是对非托管代码的巨大改进。没有引用计数,也不需要跟踪可能需要释放对象的所有路径。当它不再被引用时,它变得可收集。这极大地简化了编码,并且内存泄漏几乎(不完全)成为过去。