Ho un array di byte lungo che devo dichiarare nel mio codice C#. Faccio qualcosa di simile a questo:Dichiarazione di un array di byte costante lungo
public static class Definitions
{
public const byte[] gLongByteArray = new byte[] {
1, 2, 3,
//and so on
};
}
Ma ottengo un errore che l'array const può essere inizializzato solo con valori null.
Se cambio const
in static
viene compilato, ma la domanda che ho è questa: quando la dichiaro come public static byte[] gLongByteArray
non verrà inizializzata ogni volta che la mia app viene caricata, giusto? In tal caso, la variabile gLongByteArray
punta semplicemente a un array definito nel file exe/dll compilato che viene caricato in memoria. La ragione che sto chiedendo è perché questo array è piuttosto lungo e non voglio che il mio programma sprechi i cicli della CPU caricandolo ogni volta che l'app inizia, o peggio, questa classe è referenziata ...
Le implicazioni sulle prestazioni sono minime, anche se è possibile farlo. Il problema più grande è che un 'byte []' non è un ottimo candidato per essere una costante. Si consiglia di utilizzare le costanti per cose che non dovrebbero mai cambiare, ma una sequenza di byte (in particolare una lunga sequenza di byte) potrebbe cambiare in un'implementazione futura. L'uso di "const" fa sì che il compilatore "bake-in" tutti i riferimenti alla costante, il che significa che il valore costante è _duplicato_ in tutto il codice. Se in seguito cambi la costante, solo i moduli compilati rispetto alla nuova costante avranno il nuovo valore. –
Come altri hanno già detto, non prendere decisioni sulle prestazioni sulla base di ipotesi; renderli in base ai fatti. Crea una matrice di dimensioni realistiche e * misura le tue prestazioni di avvio * con e senza di essa. Allora saprai se ha un effetto o meno. Gli array di byte grandi inizializzati dalle costanti vengono gestiti in modo ragionevolmente efficiente. –
@EricLippert: non ci sono indovinelli coinvolti - mai sentito parlare di un debugger? – ahmd0