.net 垃圾收集和托管资源

标签 .net memory-management memory-leaks garbage-collection performance

原始数据类型(int、char 等)的内存是在离开作用域后立即释放,还是添加到垃圾收集以供以后释放?

考虑:

For x as integer=0 to 1000
dim y as integer
Next

如果这不会向垃圾收集器添加 1000 个整数以供稍后清理,
它如何处理字符串对象?这会创建 1000 个字符串以供稍后清理吗?
For x as integer=0 to 1000
dim y as string=""
Next

仅包含 int、string 等数据类型的结构如何?

仅包含托管资源的类?

最佳答案

好吧,只有两个答案已经存在错误信息......

  • 字符串不是原始类型
  • 字符串不是值类型
  • 值类型值并不总是在堆栈上创建 - 这取决于变量所在的位置。如果它是类的一部分,则它与该对象的其余数据一起存储在堆中。
  • 即使局部变量被捕获(例如在匿名函数和迭代器块中),它们也会出现在堆上
  • 字符串字面量,例如 ""是固定的 - 它们总是解析为相同的字符串。该循环实际上并没有创建任何字符串。

  • 有关更多信息,请参阅我关于 what goes where in .NET memory 的文章。您可能还想考虑 whether it's important or not

    关于.net 垃圾收集和托管资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/493388/

    相关文章:

    c++ - 内存泄漏在哪里?

    c# - 同一应用程序中的多个静态变量范围?

    c# - Action<T> 与虚拟方法

    memory-management - arm 架构上的 dma_map_single 内部结构

    c++ - 为什么编译器在编译时不知道局部变量的地址?

    iphone - 任何用于查找 ipad 内存使用情况的应用程序

    .net - 未调用 WCF 异步方法

    .net - 跨多个项目使用 EntityFramework

    c - 为什么 malloc 中的内存不归零?

    memory-management - iOS 7 内存问题