jlezard
jlezard

Reputation: 1437

.NET object size limit

It seems there is a 2 GB size limit for objects in .NET: How to run Fsi.exe in 64 Bits?

Is there a work around this? I would like to load a very large float array (10 GB) in memory and then do some work.

Upvotes: 7

Views: 7939

Answers (3)

Marc Gravell
Marc Gravell

Reputation: 1062745

In versions of .NET prior to 4.5, the maximum object size is 2GB. From 4.5 onwards you can allocate larger objects if gcAllowVeryLargeObjects is enabled. Note that the limit for string is not affected, but "arrays" should cover "lists" too, since lists are backed by arrays.

Upvotes: 5

Andy Lowry
Andy Lowry

Reputation: 1773

I don't think there is an easy workaround for this, it seems to me there could be difficulties implementing a heap without a 2Gb limit on object size.

Maybe you would be better breaking the data up some how. It should be possible to write a class that behave like an array but splits the data up into fixed sized chunks under the hood.

Upvotes: 2

Brian Rasmussen
Brian Rasmussen

Reputation: 116401

.NET limits any object to max 2 GB even on 64 bit platforms. You can create your own data type, that uses multiple objects to store more data, thus getting around the 2 GB limit of a single object. For instance a List<float[]> would allow you to store more than 2 GB, but you would have to write the necessary plumbing code to make it behave similar to a single, large array.

You may also want to check this question.

Upvotes: 14

Related Questions