【发布时间】:2026-02-14 09:50:02
【问题描述】:
在 C# 中,假设您运行多个线程,使用大量对象和 RAM 进行大量计算。最后,所有线程都完成了。然后你运行GC.Collect()。你只是不要停止这个过程。
除非您在静态变量中存储对某些对象的引用,否则我希望最终使用的 RAM 会回到 0,除了加载的 DLL 或确实使用大量 RAM 的东西(很多意味着几 GB )。
是真的吗?
是否存在我们可能不知道的剩余大 RAM 使用量? (不包括错误代码导致的内存泄漏)
【问题讨论】:
-
这感觉像是一个 XY 问题 - meta.stackexchange.com/questions/66377/what-is-the-xy-problem。 为什么你在乎?您要解决的实际、真实、潜在的问题是什么?
-
另外,您有一个假设 - 当您测试它时发生了什么?
-
“除非你将某些对象的引用存储在静态变量中” 静态变量是内存中的变量,就像每个函数的本地变量一样。变量作用域只是一种编译时约定,如强类型化和类访问器,以避免许多可能的错误。分配给静态变量的任何内容都具有对应用程序根的完整的强引用链,这不符合收集条件。但我同意这听起来确实有点像 XY 问题。我们一般不做这种内存微优化。
标签: c# .net memory-management garbage-collection