垃圾收集的工作环境?
垃圾回收的优点是你不要太担心它或多或少。较低级别的实现可以更容易地进行计划(事先或即时),有更多时间去考虑其他复杂问题,而不必考虑释放内存。
有些事情要记住要利用垃圾收集,但它们通常很容易或直观。几个例子:
您可能需要改变你的思维来利用这一事实循环引用是不是一个真正的问题任何更多的(只要涉及的管理过程中的所有资源)。习惯相当简单而有趣!
在可能的最低范围内定义变量很有帮助。但是,无论如何,你想这样做。
所以,如果你是从什么地方移动到.NET没有管理的内存,是的,了解GC一点,但如果你发现自己不去想它,这点,不担心。
编辑:请记住,您仍然可以在.NET中使用非托管资源。即使在很多常见的.NET命名空间中,下面也会使用非托管资源。您必须将.Dispose()
(和相应的Using
关键字)理解为您正在进入非托管内存的线索。 (see me blab about that here.)
unmanged代码呢? – SmartestVEGA 2010-03-24 17:42:49
@SmartestVEGA:您指定的,通过标签,C#+ VB.NET ...... – 2010-03-24 17:43:43
我在.NET开发人员的采访,他们都在强调太多的垃圾收集 – SmartestVEGA 2010-03-24 17:47:52
我的主要担心,日常的企业工作,垃圾收集方面是确保我们有一个良好的管理服务。 ;)
真的,对于大多数LOB应用程序,您可能永远不需要担心垃圾收集。如果您发现存在性能问题,并且配置文件显示存在内存相关性能问题或内存泄漏,那么查看GC性能的然后是有用的。这在典型的LOB应用程序中很少见。
我在.NET开发人员的采访,他们都在强调太多垃圾收集见过见过..! – SmartestVEGA 2010-03-24 17:45:11
@SmartestVEGA:这真的取决于工作。我在日常工作中非常了解GC,但我在科学软件上工作,在那里perf。问题非常重要。对于公司LOB,这很少是一个问题。 .NET非常适合这种情况 - 通常可以完全忽略内存问题,并且它可以正常工作。 – 2010-03-24 17:47:39
@SmartestVEGA你在哪里看过这次采访,他们强调很多,这可能有助于我们理解他们为什么强调。像以上所有,关于GC的最好的事情是你不必担心它,但是当设计一个新的类时,我会记住任何对象/资源可能需要在dispose/finalize函数中进行处理 – spacemonkeys 2010-03-24 21:43:05
对于大多数目的而言,您不必过于担心GC。如果您担心这一点,这可能意味着您已经有潜在的编码问题(意外泄漏对象引用,可能是通过静态事件等)。
当你发现你有问题,所以把它当作一个反应的事情 - 和使用内存分析器来查找和解决这个问题。
了解GC的主要原因是它不是灵丹妙药。它适用于内存和资源类似于内存,即资源,你有一个有限但相当大的资源和等效的资源实例是可以互换的,即任何两个1 MB的内存缓冲区同样适合你所需要的与他们一起做。
那么临时文件像内存(你不关心哪个文件是),以及文件句柄像内存(你不关心具体的句柄值是什么),但文件本身,并在文件锁定,不是 - 他们有一个独特的有意义的名字,他们与之相关联。所以当你清理它时,你会更加关心它。您通常不能让GC在某个随机时间关闭文件锁定或删除特定文件。但是你可以用临时文件来做到这一点。
我认为你需要详细说明你的问题。 (虽然我很慢) – ChaosPandion 2010-03-24 17:41:48
只是想知道,你们在日常工作生活中的垃圾收集工作? – SmartestVEGA 2010-03-24 17:43:34
每次我必须去一个学士学位来澄清一个规范,而不是直接向客户:我认为这是垃圾收集。 – 2010-03-24 17:45:23