Mi chiedevo se in C# esiste una struttura che può contenere più della restrizione di Int.MaxValue di 2.147.483.647 elementi, in caso di serie di informazioni veramente grandi. Questo dovrebbe essere fatto con array a più livelli? O potresti creare un array che abbia una lunghezza massima di Long.MaxValue? Se é cosi, come?Array C# con capacità superiore a Int.MaxValue
risposta
E 'stato fatto, un esempio BigArray<T>
implementazione is here.
Fantastico! Grazie per avermi dato il link a questo! –
molto piccoli computer avrà abbastanza memoria per contenere tale struttura in memoria.
Non è più vero. – SLaks
@SLaks, quindi forse dovrei aggiungere: pochissimi computer gestiranno tale struttura in memoria. –
'readonly privato int [] _arrInts = new int [IntMax];' genera un 'System.OutOfMemoryException'. Dove 'private const int IntMax = int.MaxValue;'. Qualche idea del perché? – barnes
ArrayList può contenere più di Int.MaxValue.
No, non può, perché il costruttore prende solo un numero intero per la capacità e quindi non può essere superiore a Int32.MaxValue –
@Richard: la logica non è * completamente * sana, poiché la capacità aumenta automaticamente. Potresti fornire 'int.MaxValue' e quindi aggiungere altri elementi. Sono abbastanza sicuro che ArrayList continuerebbe a fallire, ma non solo perché non è possibile specificare la capacità * finale * del costruttore come la capacità * iniziale *. –
È possibile utilizzare una struttura basata su indice solo se l'indicizzatore era un long
(int64) anziché uno int32
.
Anche un List
non funziona poiché l'indicizzatore è un int32
.
Sì, questo è quello che pensavo ... oh, beh, sembra che ho bisogno di ridurre le informazioni. –
Qual è il tuo requisito? È difficile credere che una matrice con più elementi di questa sarà la soluzione corretta per qualsiasi problema del mondo reale, indipendentemente dal fatto che sia legale o meno. Potresti pensare a un database qui, sia permanente che in memoria. Questo è il mezzo standard per l'organizzazione di set di dati molto grandi.
Attualmente il CLR ha un limite di 2 GB per ogni singolo oggetto, quindi sarà necessario costruirlo da più array, anche per un tipo di elemento di byte
. Quello dovrebbe essere fattibile comunque. La maggior parte delle normali interfacce di raccolta fallirebbe come usano int
per l'indice, conta ecc
Io credo il CLR in sé non è limitata a un limite complessivo processo che impedirebbe questo - anche se aveva quasi certamente voglio essere in esecuzione su un CLR e OS a 64 bit, ovviamente.
Che è tutto un po 'strano dato che c'è un sovraccarico di GetValue su System.Array che richiede molto tempo indicando che potresti avere array di dimensioni maggiori (http: // msdn.microsoft.com/en-us/library/2zexc3z9.aspx) –
@Rune: Sì, sono d'accordo che è molto strano. Un po 'di design prematuro, potenzialmente. –
@LukeH - sì e questa è la parte strana quando non aggiungono nulla (tranne che per ingannare lo sfortunato) perché aggiungerli del tutto. Aggiungerli quando sarebbero effettivamente supportati non sarebbe un cambiamento sostanziale. (Rimuovendoli ovviamente non sarebbe) –
- 1. C++ - Array circolare con limiti inferiore/superiore?
- 2. Array Swift init con capacità
- 3. GetHashCode (chiave) e int.MaxValue
- 4. Capacità stack in C#
- 5. Matrice con capacità in Swift
- 6. Inizializzazione NSMutableArray con e senza capacità di
- 7. Restituisce array C++ a C#
- 8. Raccolta di capacità massima in C#
- 9. C# convertire i byte per raddoppiare con una precisione "superiore"
- 10. Sum a Array - Objective-C
- 11. Diagonale superiore di un array numpy 2D
- 12. Quanto conta se creo un NSMutableArray con capacità = 3 invece di capacità = 50?
- 13. Integer a intero array C#
- 14. Puntatori a 2D array C, C++
- 15. capacità StringBuilder()
- 16. Riempi javascript array con C#
- 17. LoopBack "raggruppa per" capacità con mySQL?
- 18. C# App.Config con array o dati simili a elenco
- 19. matrice vb6 con -1 per limite superiore
- 20. sono HashMaps con capacità predefinita veloce
- 21. Passaggio di array numpy tridimensionale a C
- 22. Array di caratteri a stringa esadecimale C++
- 23. byte [] array a struct con array a lunghezza variabile
- 24. Converti caratteri superiore a quella inferiore e inferiore superiore (viceversa)
- 25. Accesso a un array 1D come array 2D in C++
- 26. È tutto superiore a None?
- 27. array di array in C#
- 28. "filtro" funzione di ordine superiore in C++
- 29. C++ sqrt precisione garantita, limite superiore/inferiore
- 30. filo Collection sicuro con limite superiore
Se stai pensando di creare array di queste dimensioni, dovresti riconsiderare il tuo approccio. –
Stai cercando di costruire il prossimo Twitter? – BoltClock
Gli array multilivello potrebbero fare il trucco, ma c'è il rischio di esaurire la memoria. A cosa ti serve? – devnull