保持NET应用程序内存健康的6

北京白癜风治疗哪里最好 http://pf.39.net/bdfyy/bjzkbdfyy/
保持.NET应用程序内存健康的6个最佳实践

大型.NET应用程序中的内存问题是某种无声的杀手。有点像高血压。你可以长期吃垃圾食品而忽略它,直到有一天你面临严重的问题。对于.NET程序,该严重问题可能是高内存消耗、主要性能问题和彻底崩溃。在这篇文章中,您将看到如何将我们的应用程序的血压保持在健康水平。

你怎么知道你的内存使用情况是否健康?你需要做什么来保持它的健康?这正是本文要讨论的内容。我们将介绍6种最佳做法,以保持内存健康并在出现问题时检测问题。您还将看到优化垃圾收集并使您的应用程序非常快速的最佳实践。

1.应尽快收集对象

为了使您的程序快速运行,主要目标是尽快收集对象。要理解为什么它很重要,您需要了解.NET的分代垃圾收集器。当使用该new子句创建对象时,它们是在第0代的堆上创建的。那是内存中非常小的空间。如果在有Gen0集合时它们仍然被引用,它们将被提升到Gen1。Gen1是更大的内存空间。如果它们在有第1代集合时仍被引用,则将它们提升到第2代。

Gen0集合是最频繁的并且非常快。Gen1集合涵盖Gen0内存空间和Gen1内存空间,并且它们更昂贵。Gen2集合包括整个内存空间,包括大对象堆(LOH)。它们非常昂贵。GC已优化为具有许多Gen0集合、较少的Gen1集合和很少的Gen2集合。但是,如果您有许多对象被提升到更高代,那么您将产生相反的效果。这会导致内存压力[1](又名GC压力)和性能不佳。

顺便说一下,新对象的分配非常便宜。您唯一需要担心的是集合。

那么如何在低代收集对象呢?很简单,只需确保不会尽快引用它们即可。有些对象,比如单例,必须永远在内存中。没关系,它们通常是不会消耗大量内存的服务。

2.使用缓存……但要小心

根据定义,像缓存这样的机制很麻烦。这些是长期存在的临时对象,可能会升级到第2代。虽然这对GC压力不利,但通常值得付出代价,因为缓存确实可以帮助提高性能。但你必须密切


转载请注明:http://www.shhjfk.com/pxxx/pxxx/13612.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了