【发布时间】:2015-06-10 01:57:02
【问题描述】:
我现在正在编写一个服务来自动化我的几个例程。现在我真的只是在上个月左右才开始学习 C#,所以我还是相当新的(但到目前为止真的很喜欢它)。我设计了我的服务,它只是在我通过 AppSettings 设置的 5 分钟计时器上运行一个方法,运行一些检查,并在需要时组织一些事情,直到下一个间隔。
我很快意识到我最初做事的方式似乎有一个非常糟糕的内存泄漏。所以我重写了大部分内容以将内容嵌入“使用”块中,然后在完成后处理这些内容。 “使用”块是工作中的一位开发人员向我推荐的,他对我很有帮助,但是当他有工作要做时,我不喜欢过多地打扰他处理我的个人项目。
目前我真的没有遇到内存使用问题,因为它只使用了大约 25Mb 的内存,但是当它启动时,它只使用了大约 8Mb,并且随着每个轮询间隔它爬升.但是一旦它达到 25Mb 的阈值,我可以看到是否下降一点,我假设是垃圾收集在做的事情,然后它爬回 25Mb,然后冲洗并重复。所以我的应用程序内存使用是稳定的,但它似乎比它需要的要高,所以我很好奇。
现在,如果我手动调用 GC.Collect,内存使用量会下降到一半。我意识到这并不理想,因为我已经对此进行了一些研究。但现在我的问题真正归结为,在内存使用和垃圾收集方面,.NET 中是否存在某种默认阈值?我问是因为它可以解释我所看到的。
我确实在Process.MaxWorkingSet Property 上查看了此页面,但我不确定它是否会有所作为,或者是否可能会给我带来问题。
我也尝试运行分析器,但老实说,这对我来说仍然是新事物,我并不完全清楚我在寻找什么。
【问题讨论】:
-
问题是什么?我建议你不要手动调用 GC.Collect。
-
我的问题是,在内存使用和垃圾回收方面,.NET 中是否存在某种默认阈值?
-
我的建议:如果您确定没有泄漏,请不要担心,只要 GC 决定这样做,就让其工作。
-
你应该阅读这个 - msdn.microsoft.com/en-us/library/ee787088%28v=vs.110%29.aspx - 特别是关于世代和条件的部分。
标签: c# memory-management garbage-collection