垃圾收集工作环境?

时间:2010-03-24 17:40:11

标签: c# .net asp.net vb.net garbage-collection

任何人都可以详细说明你在日常公司工作中的垃圾收集工作吗?

您在SDLC中考虑垃圾收集的程度是多少?

4 个答案:

答案 0 :(得分:4)

垃圾收集的好处是你过于担心或根本不担心。您可以更轻松地规划较低级别的实施(事先或动态),有更多时间担心其他复杂问题,而不必考虑释放内存。

有一些事情要记住利用垃圾收集,但它们通常很容易或直观。几个例子:

  • 你可能不得不改变你的想法,以利用循环引用不再是一个问题的事实(只要所涉及的所有资源都是管理的)。这是非常容易和有趣的习惯!

  • 在尽可能最低的范围内定义变量很有帮助。但是,无论如何,你都想

所以,如果你从没有托管内存的某个地方迁移到.NET,是的,请稍微阅读一下GC,但是如果你发现自己没有想到它,那就是,不要不用担心。

修改:请记住,您仍然可以在.NET中使用非托管资源。即使在许多常见的.NET命名空间中,也会使用非托管资源。您必须将.Dispose()(和相应的Using关键字)理解为您正在进入非托管内存的线索。 (see me blab about that here.

答案 1 :(得分:2)

对于大多数用途,您不必过于担心GC。如果您担心这一点,可能意味着您遇到了基础编码问题(意外泄漏对象引用,可能是通过静态事件等)。

当您发现问题时,请将此视为被动事物 - 并使用内存分析器查找并修复该问题。

答案 2 :(得分:1)

我主要担心的是,对于日常公司工作而言,在垃圾收集方面确保我们有一个良好的清洁服务。 ;)

实际上,对于大多数LOB应用程序,您可能永远不必担心垃圾回收。如果您发现性能问题,并且性能分析表明您存在与内存相关的性能问题或内存泄漏,则然后查看GC性能非常有用。这在典型的LOB应用程序中很少见。

答案 3 :(得分:0)

了解GC的主要原因是它不是灵丹妙药。它适用于内存和类似于内存的资源,即资源有限但供应量很大,资源的等效实例可以互换,即任何两个1 MB内存缓冲区同样好因为你需要做些什么。

所以临时文件就像内存(你不关心它是哪个文件),文件句柄就像内存(你不关心具体的句柄值是什么),但文件本身和文件锁定,不是 - 他们有一个与之相关的独特有意义的名字。因此,您需要更加谨慎地清理它们。您通常不能让GC关闭文件锁定或在某个随机时间删除特定文件。但你可以用临时文件来做到这一点。