Out of memory exception is ussally kicked all the way back from the card.
Which indicates that some thing is not being disposed of ... properly.
So the card is basically filling up with memory.
When i say properly i mean it could be on your side or monogames side or both.
It's tricky stuff and when it comes to the card it gets even trickier.
You can check if objects are disposed as well after you call collect(true), IDisposable implements a IsDisposed method meaning after you unload you can test each content object for being null and or isdisposed to try to track down problems. Though neither will tell you if it's been finalized.
You should definately call
True ensures that the gc waits for the trace to complete before returning control of the thread.
Or try calling it twice, there are reasons this might work.
You can try to call the below, though this is not a good sign if it works,
If this works it might indicate that a dispose method isn't set up right.
Thier is no guarentee that this will work GC.WaitForPendingFinalizers() if it works.