.Net内存限制

.Net内存限制,.net,memory,.net,Memory,我有一个运行在32位机器上的.Net应用程序。该应用程序是一个windows服务。它始终在600-800 MB范围内徘徊。这是个问题吗。如果一个应用程序超过1 GB,这是内存问题吗?否,如果主机有足够的内存,这很好。但是,您可能希望监视完整的GC运行;完全垃圾收集不应该经常发生(偶尔发生一次,当然不是每隔几秒钟发生一次),如果发生这种情况,则表明进程在其内存限制上运行,并且在尝试恢复内存时“浪费”了太多时间,这最终会使进程慢很多。使用1 Gig应该可以。以下是指向有关.net对象可以使用的最大内

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

否,如果主机有足够的内存,这很好。但是,您可能希望监视完整的GC运行;完全垃圾收集不应该经常发生(偶尔发生一次,当然不是每隔几秒钟发生一次),如果发生这种情况,则表明进程在其内存限制上运行,并且在尝试恢复内存时“浪费”了太多时间,这最终会使进程慢很多。

使用1 Gig应该可以。以下是指向有关.net对象可以使用的最大内存量的问题的链接:


很难说内存使用是否有问题

我想回答几个问题:

  • 这些数字是预期的吗
  • 你知道那些记忆都往哪里去了吗
  • 如果这些数字是正确的,那么您的解决方案是否具有可扩展内存
  • 如果任何初始条件发生变化,内存分配是否保持不变
  • 您的服务器/客户端硬件能提供所有这些内存吗?如果你有多次处决怎么办
如果你在任何答案中发现“不”,我会开始考虑这是一个问题。 1GB问题也是如此


编辑:修复了一些打字错误

您在跨过1GB时不会遇到任何问题

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


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

这是对象的最大大小,不是应用程序本身。1.2-1.6之间的OutOfMemory异常不是因为堆碎片而导致的吗?@Naveen:不是。NET GC是一个压缩垃圾收集器,所以唯一的问题是LOH。但是,即使没有大型对象,也会发生这种情况。这实际上是CLR开销+单独的堆,以及.NET中的寻址方式…嗨。你的回答符合我的情况。你能告诉我在哪里可以得到更多关于这个效果的细节吗?顺便说一句,600-800MB是如何测量的?您使用什么工具来报告此内存使用情况?