2010-10-15 25 views
17

UInt32.MaxValue olan byte s dizisini oluşturmaya çalışıyorum. Bu dizi bellek içi veri tabanı esas küçük (imsi) 'dir: my makinedeMaksimum bayt uzunluğu []?

byte[] countryCodes = new byte[UInt32.MaxValue]; 

Ancak çalışma anında, ben "Aritmetik işlem bir taşma sonuçlandı" ile System.OverflowException olsun.

Anlaşma nedir? unsafe bloğu ve malloc kullanmam gerekiyor mu? Bunu C# 'da nasıl yapardım? elemanların teorik maksimum sayısı Int32.MaxValue yani

+4

Pek çok ülke olduğunu bilmiyordum! – James

cevap

24

System.Array geçerli uygulaması, vb tüm iç sayaçlar için Int32 kullanır.

Ayrıca Microsoft CLR tarafından uygulanan nesne başına 2 GB'lık bir maksimum nesne sınırı vardır.

iyi bir tartışma ve burada geçici çözüm ...

  • Ve birkaç ilişkili, değil oldukça yinelenen, soru ve burada cevaplar ...

  • 1

    ben ilk etapta bunu yapmaz. Neden bu bellek içi veritabanı için tüm bu belleği bir kenara koymak istersiniz? Ya ilerledikçe artan bir veri yapısını (örneğin, List<int>) istemez miydiniz? Veya (tercih edilirse) sqlite gibi bir bellek içi veritabanı kullanın?

    7

    .NET 4.5 Üzerinde bir bayt dizisinin maksimum anlık uzunluğu: 2147483591 veya int.MaxValue öğesinden 56 daha azdır. Bulunan:

    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) 
        {} 
    } 
    
    İlgili konular