Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我试图了解如何在 .Net 世界中创建对象,而不是在非托管代码环境(VB6 等)中创建对象
据我了解,当使用新的 keyowrd 在 C# 中创建对象时,引用变量被放置在托管堆中,直到垃圾收集器采取主动措施来检查对象是否仍然具有对它的引用。如果没有,它就会被销毁。这是否意味着 GC 一直在运行?这不是一个昂贵的过程吗?
有人可以解释得更好吗?
这在无人管理的代码环境中有何不同?
GC 不会连续运行。它按需运行,这意味着如果不先释放一些内存,就无法填充内存请求。所以不,这不是一笔巨大的开支。在服务器端,它可以在后台运行。(我似乎记得这将扩大,现在有更多的多核系统可用?)
对于大多数应用程序来说,GC 是对非托管代码的巨大改进。没有引用计数,也不需要跟踪对象可能需要释放的所有路径。当它不再被任何地方引用时,它就变得可收藏了。这极大地简化了编码,并且内存泄漏几乎(不完全)成为过去。