This is a limitation for every process in Windows. Each process receives ~ 2 GB of virtual address space (that is, that uses a bunch) in a 32-bit machine. And I'm afraid you can't do it.
Roughly speaking, the CLR can hold up to ~ 1.6 GB of objects in memory. This should be sufficient for most applications. If not, then you need to work with your application.
In my case, I ran into a similar problem and then used SqlDataReader to retrieve objects at a given block size, processed it, calculated it, cleared it from memory, and then extracted another fragment.
There is also a detailed article on MSDN - Researching Memory Problems
Hope this will be helpful.
source share