Qualcuno potrebbe dirmi quale sia la capacità dello stack in C#.Capacità stack in C#
Sto cercando di formare un oggetto chiuso mesh 3D utilizzando una serie di 30.000 elementi.
Qualcuno potrebbe dirmi quale sia la capacità dello stack in C#.Capacità stack in C#
Sto cercando di formare un oggetto chiuso mesh 3D utilizzando una serie di 30.000 elementi.
La dimensione dello stack predefinita per un'applicazione .NET è 1 MB (l'impostazione predefinita è 256 KB per le applicazioni ASP.NET a 32 bit e 512 KB per le app ASP.NET a 64 bit), ma è possibile modificarla. Per l'applicazione è possibile modificare la dimensione predefinita modificando l'intestazione PE dell'eseguibile. Per i thread che crei, puoi utilizzare il sovraccarico del costruttore che accetta una dimensione dello stack.
Ma come sottolinea Anton Tyjhyy nella sua risposta, gli array sono tipi di riferimento e quindi si trovano nell'heap (anche se l'array è in grado di contenere un gruppo di tipi di valore).
La dimensione di 256 KB per le applicazioni ASP.Net è per le applicazioni a 32 bit. Su Windows Server 2008 64 e versioni successive, la dimensione dello stack è stata aumentata fino a 512 KB. Vedere KB 932909 per ulteriori dettagli. – Dono
@Dono Grazie per le informazioni. Aggiornerò –
@BrianRasmussen È possibile allocare un array nello stack usando 'stackalloc'. Inoltre, solo perché qualcosa è un tipo di riferimento non significa necessariamente che sarà allocato nello stack o nell'heap, varia in base all'implementazione del CLR e nell'implementazione .NET varia in alcuni casi speciali (dimensione del tipo e scopo). –
La dimensione dello stack è configurabile e can be set in several different ways.
L'array risiede nell'heap, le dimensioni dello stack sono irrilevanti nel tuo caso.
Non se lo dichiarate con stackalloc ... – Nuzzolilo
Per utilizzare lo stack per la memorizzazione di un array, è necessario utilizzare un codice non sicuro con puntatori e stackalloc per allocare lo spazio di memoria desiderato nello stack.
Se si desidera verificare il valore per il proprio assieme .Net corrente, è possibile farlo utilizzando il comando ILDASM
fornito con il prompt dei comandi di Visual Studio. Una volta avviato lo strumento, apri l'assieme e vai al menu View -> Headers
. Ora scorri verso il basso fino alla sezione PE Optional Header (32 bit)
nella finestra Headers
appena aperta. Verrà visualizzato due campi:
Tale spazio è riservato nel file di paging del sistema operativo in modo lo stack può sempre essere sostituita quando necessario .
si può solo provare voi stessi mettendo bilioni di articoli su di esso e vedere quando si blocca? – Smashery
Una domanda strettamente correlata è [Dimensione dello stack sotto Mono] (http://stackoverflow.com/questions/19817790/stack-size-under-mono). – Palec