I have an MSMQ client app which basically does this (sorry for the
psueso-psuedo-code):

TimeSpan timeout = new TimeSpan( 0, 0, 1, 0, 0 );
while( true )
{
  try
  {
    Message m = messageq.Receive( timeout );
    MyType[] mytype = (MyType[])m.Body;
  }
  catch( MessageQueueException e )
  {
    if( e.MessageQueueErrorCode == MessageQueueErrorCode.IOTimeout )
      continue;
    else
      return;
  }
}

The app memory usage climbs while running and consuming messages, eventually
peaking at ~130 when the queue is emptied. The length of the mytype array is
50 or less, and MyType is a quite small as well. Ordinarly this app wouldn't
run over 5MB. My guess was the GC just didn't have a chance to cleanup, but
once the queue is empty the app sits idle in one minute intervals waiting
for new messages - and yet the memory stays up, sometimes for half an hour.
Once the the GC fires, the memory drops to ~1MB.

I know it's a no-no to force the GC, so is there something I could fix in my
coding style? When I ran this against a very large set of messages I
actually got a "running low on virtual memory" from windows, so I need to so
something different.

Thanks,

-Ed Evans

You can read messages from the Advanced DOTNET archive, unsubscribe from Advanced 
DOTNET, or
subscribe to other DevelopMentor lists at http://discuss.develop.com.

Reply via email to