tags:

views:

118

answers:

4
+1  Q: 

.Net Memory limit

I have a .Net application running on a 32 bit box. The application is a windows service. It consistently hovers around 600-800 MB range. Is this a problem. If an application crosses 1 GB, is it a memory issue ?

+2  A: 

No, that's perfectly fine if the host has enough memory. You may want to monitor the full GC runs however; full garbage collections should not occur very often (once in a while, for sure not every few seconds) and if they do this indicates that the process is running on its memory limit and "wastes" too much time trying to recover memory, which ultimately slows down the process a lot.

Lucero
+2  A: 

Using 1 Gig should be fine. Here is a link to a question about the maximum amount of memory a .net object can use:

http://stackoverflow.com/questions/982051/net-max-memory-use-2gb-even-for-x64-assemblies

Kevin
That's the max size of an object, not the application itself.
Reed Copsey
+2  A: 

It's hard to tell if that memory usage is a problem.

A few questions i would try to answer:

  • Are those numbers expected?
  • Do you know where all that memory is going?
  • If those numbers are correct, is your solution scalable memory-wise?
  • Does that memory allocation stay constant if any initial condition is changed?
  • Can your server/client hardware provide all that memory? What if you have multiple executions?

If you find a 'No' in any answer, i'll start considering it a problem. The same goes for the 1 GB issue.

EDIT: fixed some typos

mcabral
+1  A: 

You won't run into any problems crossing 1GB.

However, if your application is targetting x86 directly, or running on 32bit Windows, you will run into problems somewhere between 1.2-1.6GB. .NET applications, when running as 32bit applications, tend to start receiving out of memory errors in this range (and not at 2GB, which would be what you'd typically expect).

That being said, if your application has a good reason to be using that much memory, and is staying under 1GB consistently, this should have no issues.

Reed Copsey
Isn't the OutOfMemory exceptions between 1.2 - 1.6 because of heap fragmentation usually?
Naveen
@Naveen: No. The .NET GC is a compacting garbage collector, so the only issues are on the LOH. However, this happens even with no large objects. It's actually CLR overhead + separate heaps, and the way the addressing works in .NET...
Reed Copsey