Maximum length of byte[]?

后端 未结 4 774
孤独总比滥情好
孤独总比滥情好 2020-12-09 09:04

I\'m trying to create an array of bytes whose length is UInt32.MaxValue. This array is essentially a small(ish) in-memory database:



        
相关标签:
4条回答
  • 2020-12-09 09:19

    The current implementation of System.Array uses Int32 for all its internal counters etc, so the theoretical maximum number of elements is Int32.MaxValue.

    There's also a 2GB max-size-per-object limit imposed by the Microsoft CLR.

    A good discussion and workaround here...

    • BigArray<T>, getting around the 2GB array size limit

    And a few related, not-quite-duplicate, questions and answers here...

    • Is there a limit of elements that could be stored in a List ?
    • Very large collection in .Net causes out-of-memory exception
    • what is the max limit of data into list in c#?
    0 讨论(0)
  • 2020-12-09 09:31

    I wouldn't do this in the first place. Why would you want to set all that memory aside for this in-memory database? Wouldn't you rather want either a data structure which size increments as you go along (e.g. List<int>)? Or (if preferred) use an in-memory database like sqlite?

    0 讨论(0)
  • 2020-12-09 09:33

    Maximum length of a byte array is: 2130702268. for example:

    var countryCodes = new byte[2130702268];
    
    0 讨论(0)
  • 2020-12-09 09:38

    On .NET 4.5 The maximum instantiatable length of a byte array is: 2147483591, or 56 less than int.MaxValue. Found via:

    for (int i = int.MaxValue; i > 0; i--)
    {
        try
        {
            byte[] b = new byte[i];
            Console.Out.WriteLine("MaxValue: " + i);
            Environment.Exit(0);
        }
        catch (Exception ignored)
        {}
    }
    
    0 讨论(0)
提交回复
热议问题