代码之家  ›  专栏  ›  技术社区  ›  stoic Kobus Kleynhans

如何使用垃圾收集器?

  •  3
  • stoic Kobus Kleynhans  · 技术社区  · 14 年前

    更新

    10 回复  |  直到 14 年前
        1
  •  3
  •   kemiller2002    14 年前

    更新…我怎样才能让事情变得更简单 为了总承包商?

    我会考虑何时使用 Finalizer

    了解 Large Object Heap 可能有一些好处,因为这可能会导致问题。

    http://techiemate.blogspot.com/2009/04/garbage-collection-in-net.html

        2
  •  14
  •   Ian P    14 年前

        3
  •  2
  •   Justin Niessner    14 年前

    使用垃圾收集器的最佳方法是。。。

    别想用它!

        4
  •  1
  •   JonH    14 年前

    GC不像你在C++中定义的析构函数。也就是说,您不需要定义它和释放以前分配的内存。GC的关键是它是自动的。 我的建议是给我们更多关于你想做什么/理解什么的信息,因为这听起来不安全。

        5
  •  1
  •   Haas    14 年前

    为了使GC更简单,请始终对任何支持IDisposable接口的对象调用Dispose()。

        6
  •  1
  •   Dan Bryant    14 年前

    关于使用GC编码的几点建议:

    1. 如果您使用非托管代码进行互操作,则需要更加了解托管内存与非托管代码的任何共享。您可能需要使用pinning和/或GC.KeepAlive来帮助GC理解非托管代码需要什么。尽量保持固定到最低限度,因为这会使GC上的事情变得更困难。

    2. 您几乎不需要实现终结器。如果类确实有终结器,那么它还应该实现与IDisposable和call相同的清理 GC.SuppressFinalize(this) 在处理之后,因为这有助于GC在你的课后高效地清理。

        7
  •  0
  •   Tim Robinson    14 年前

    如果您没有注意到您正在使用GC,那么您正在使用它,并且您正在正确地使用它。

        8
  •  0
  •   Rowland Shaw    14 年前

    了解它的工作原理总是有用的;但在大多数情况下,你不需要太担心。

    当您开始分配非托管资源(或这样做的对象)时,值得在 IDisposable pattern 这样您就可以控制资源何时被释放(或者如果您想在与同行交谈时听起来很有见识的话,可以选择“确定性最终确定”)。

        9
  •  0
  •   supercat    14 年前

    在C中通常使用的内存管理风格中,跟踪堆中哪些区域空闲或分配的信息与指示实际使用哪些区域的信息是分开的。当不再需要堆上的信息时,代码必须显式地将其标记为未分配,否则它可能永远保持分配状态。

    基于垃圾收集的系统将系统中的所有堆对象引用视为使用哪些对象的最终指示符。因为在每次分配对象时扫描系统中的所有对象引用是不切实际的,所以系统有效地“批处理”了工作:只要堆上仍然存在可用内存空间,内存就只是按顺序分配给对象。在堆太满之前,不会尝试回收任何空间。

    如果任何线程在局部变量中持有对它的引用,或者任何全局变量持有对它的引用,或者如果被视为“已使用”的对象在任何字段中持有对它的引用,则该对象将被视为“已使用”。编译器通常可以判断保存对象引用的局部变量是否永远不会被实际使用,但它不能用全局变量或对象字段来做出这样的决定。如果一个有用的对象包含一个不再实际使用的对象引用,那么该引用应该设置为null(在VB中为Nothing)。如果不这样做,无用的对象将“保持活着”,只要有用的对象是。如果有用的对象类似于应用程序的主窗体,那么结果可能是内存泄漏,只要应用程序保持打开状态,这种泄漏就会持续存在。

        10
  •  0
  •   J D    13 年前

    对GC一无所知,也从来没有必要使用它(或者我这么认为),它的典型用途是什么,如果我提高自己的技能并更多地了解GC,我/我的系统将如何受益?

    更新…我怎样才能让GC更容易?

    使用值类型减少堆中指针的数量。使用对象树而不是长数组使堆遍历更加增量并减少延迟。避免将引用写入堆中的可变表,因为这会导致写障碍,并降低吞吐量和延迟。