In C #, per quanto riguarda le prestazioni, le dimensioni di un oggetto sono importanti quando si accede a uno dei suoi membri tramite un riferimento?

1

Può essere una domanda stupida, ma in C #, per quanto riguarda le prestazioni, le dimensioni o la complessità di un oggetto sono importanti quando si accede a uno dei suoi membri attraverso un riferimento? O solo quel membro specifico è tutto ciò che conta?

So che è un'ottimizzazione prematura, ma sono curioso.

    
posta Pablo J. Martínez 22.12.2014 - 06:39
fonte

1 risposta

6

Risposta breve: no.

Risposta lunga: presumo quando si scrive "dimensione" di un oggetto, si intende la dimensione (in byte) delle variabili membro e quando si scrive "complessità", si intende il numero di membri, il numero di diversi tipi utilizzati, e così via. L'accesso a un oggetto tramite una funzione membro risulterà nel codice IL che contiene

  • spingendo i parametri del metodo nello stack
  • premendo un "questo" riferimento allo stack
  • chiamando la funzione (che si tradurrà in una semplice dichiarazione di chiamata a livello di codice macchina, non dipendente dalla dimensione dell'oggetto)

(Questo è un modello semplificato, non prendendo in considerazione cose come l'inlining, ma è sufficiente per rispondere alla tua domanda). Quindi, come vedi, in nessuna di queste operazioni la dimensione dell'oggetto stesso ha un'influenza. E nemmeno il numero e la struttura delle altre funzioni membro.

Le dimensioni sono importanti solo dal punto di vista delle prestazioni quando si copiano oggetti, quando li si archivia su disco o su un database o quando si accede ai dati di così tanti oggetti diversi che la cache della CPU non è sufficientemente grande da contenere tutto i dati accessibili. Quest'ultimo potrebbe accadere quando il "numero di oggetti x dimensione dell'oggetto" supera un certo limite, ma dipende anche da quali altre cose fa il programma, quali altri dati sono coinvolti. Quindi è un effetto accumulato, e dubito che contenga "l'impatto sulle prestazioni causato dall'accesso a uno dei suoi membri attraverso un riferimento".

    
risposta data 22.12.2014 - 07:01
fonte

Leggi altre domande sui tag