2010-04-06 82 views
2

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

+0

BTW - 600-800MB测得如何?你用什么工具来报告这种内存使用情况? – 2010-04-06 20:03:51

回答

2

这是很难说,如果该内存使用是一个问题。

的几个问题,我会尝试回答:

  • 是那些数字有望?
  • 你知道所有的记忆在哪里吗?
  • 如果这些数字是正确的,您的解决方案可扩展的记忆方式?
  • 如果任何初始条件发生更改,该内存分配是否保持不变?
  • 您的服务器/客户端硬件可以提供所有内存吗?如果你有多次执行会怎么样?

如果您在任何答案中发现“否”,我会开始考虑它是一个问题。 这同样适用于1 GB的问题。

编辑:修正了一些错别字

2

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

2

你不会遇到任何跨越1GB的问题。但是,如果您的应用程序直接针对x86,或者在32位Windows上运行,则会遇到1.2-1.6GB之间的问题。 .NET应用程序在以32位应用程序运行时,往往会开始在此范围内收到内存不足错误(而不是2GB,这是您通常所期望的)。这就是说,如果你的应用程序有足够的理由使用那么多的内存,并始终保持在1GB以下,这应该没有问题。

+0

由于堆碎片通常,不是1.2-1.6之间的OutOfMemory异常? – Naveen 2010-04-06 19:37:44

+0

@Naveen:不。.NET GC是一个压缩垃圾收集器,所以唯一的问题是在LOH上。但是,即使没有大对象,也会发生这种情况。它实际上是CLR开销+单独的堆,以及寻址在.NET中的工作方式...... – 2010-04-06 20:03:18

+0

嗨。您的答案与我的情况相符。你能告诉我在哪里可以得到关于这种效果的更多细节? – Nasenbaer 2012-05-29 13:35:45