【问题标题】:.Net Memory limit.Net 内存限制
【发布时间】:2010-04-06 17:42:11
【问题描述】:

我有一个在 32 位机器上运行的 .Net 应用程序。该应用程序是一个 Windows 服务。它始终徘徊在 600-800 MB 范围内。这是不是一个问题。如果应用程序超过 1 GB,是否是内存问题?

【问题讨论】:

  • BTW - 600-800MB 怎么测?您使用什么工具来报告此内存使用情况?

标签: .net memory


【解决方案1】:

很难判断内存使用是否有问题。

我想回答几个问题:

  • 这些数字是预期的吗?
  • 你知道所有记忆都去哪儿了吗?
  • 如果这些数字是正确的,您的解决方案是否可扩展内存?
  • 如果任何初始条件发生更改,内存分配是否保持不变?
  • 您的服务器/客户端硬件能否提供所有内存?如果您有多次处决怎么办?

如果您在任何答案中发现“否”,我将开始认为这是一个问题。 1 GB 问题也是如此。

编辑:修正了一些错别字

【讨论】:

    【解决方案2】:

    不,如果主机有足够的内存,那很好。但是,您可能想要监视完整的 GC 运行;完全垃圾收集不应该经常发生(偶尔一次,肯定不是每隔几秒钟),如果这样做表明进程正在其内存限制上运行并且“浪费”太多时间试图恢复内存,最终大大减慢了这个过程。

    【讨论】:

      【解决方案3】:

      超过 1GB 不会遇到任何问题。

      但是,如果您的应用程序直接针对 x86,或者在 32 位 Windows 上运行,您将在 1.2-1.6GB 之间遇到问题。 .NET 应用程序在作为 32 位应用程序运行时,往往会开始接收此范围内的内存不足错误(而不是您通常期望的 2GB)。

      话虽如此,如果您的应用程序有充分的理由使用这么多内存,并且始终保持在 1GB 以下,那么这应该没有问题。

      【讨论】:

      • 1.2 - 1.6之间的OutOfMemory异常不是因为堆碎片通常吗?
      • @Naveen:不。.NET GC 是一个压缩垃圾收集器,所以唯一的问题在于 LOH。然而,即使没有大物体也会发生这种情况。它实际上是 CLR 开销 + 单独的堆,以及在 .NET 中的寻址方式......
      • 嗨。你的回答符合我的情况。你能告诉我在哪里可以获得有关这种效果的更多详细信息吗?
      【解决方案4】:

      使用 1 Gig 应该没问题。这是一个关于 .net 对象可以使用的最大内存量的问题的链接:

      .NET Max Memory Use 2GB even for x64 Assemblies

      【讨论】:

      • 这是对象的最大大小,而不是应用程序本身。
      猜你喜欢
      • 1970-01-01
      • 2012-04-02
      • 2021-11-15
      • 2016-11-26
      • 2010-09-17
      • 1970-01-01
      • 2013-03-29
      • 2011-08-31
      • 2010-09-26
      相关资源
      最近更新 更多