简体   繁体   中英

Out of memory exception on 64bit

im trying to create the following array

int numOfArrays = 50000;
int lengthOfArrays = 13500;

long[,] unsortedNumbers = new long[numOfArrays,lengthOfArrays];

but i keep getting the out an memory exception. Im targeting x64, i believe ive set the large-address-aware flag, see pic, yet im still getting the error. Odd thing is, i have a list in the same program which consumes 16gig of ram without any issues.

System:

64gig ram

100gig free on hd.

There's a 2Gig Limit on the size of objects in the .NET runtime for both 32bit and 64bit processes.

But in NET 4.5 you can increase the limit of NET code which is running on the runtime in a 64bit process with gcAllowVeryLargeObjects .

Your NET code will be running as 64bit if:

  • your Platform Target says "x64"
  • you are using NET 4 and your Platform Target says "AnyCPU" and you are running on a 64bit OS platform
  • you are using NET 4.5 and your Platform Target says "AnyCPU" and you have "prefer 32-bit" off/unticked and you are running on a 64bit OS platform

You are allocating:

50000 * 13500 * 8 = 5400000000 bytes = 5.029 gigabytes

If you don't have the luxury of using NET 4.5 then depending on your usage scenario you may be able to use BigArray instead:

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM