C# : Out of Memory exception
Today my application threw an OutOfMemoryException
. To me this was always almost impossible since I have 4GB RAM and a lot of virtual memory too. The error happened when I tried to add an existing collection to a new list.
List<Vehicle> vList = new List<Vehicle>(selectedVehicles);
To my understanding there isn't much memory allocated here since the vehicles my new list should contain already exist inside the memory. I have to admit Vehicle
is a very complex class and I tried to add about 50.000 items to the new list at once. But since all Vehicle
s in the application come from a database that is only 200MB in size, I have no idea what may cause an OutOfMemoryException
at this point.
Solution 1:
3 years old topic, but I found another working solution.
If you're sure you have enough free memory, running 64 bit OS and still getting exceptions, go to Project properties
-> Build
tab and be sure to set x64
as a Platform target
.
Solution 2:
Two points:
- If you are running a 32 bit Windows, you won't have all the 4GB accessible, only 2GB.
- Don't forget that the underlying implementation of
List
is an array. If your memory is heavily fragmented, there may not be enough contiguous space to allocate yourList
, even though in total you have plenty of free memory.
Solution 3:
.Net4.5 does not have a 2GB limitation for objects any more. Add this lines to App.config
<runtime>
<gcAllowVeryLargeObjects enabled="true" />
</runtime>
and it will be possible to create very large objects without getting OutOfMemoryException
Please note it will work only on x64 OS's!