Domanda

Che cos'è l'allineamento?

A cosa serve?

Puoi incorporare qualcosa in C #?

È stato utile?

Soluzione

Che cos'è

Nei termini di C e C ++ si usa la parola chiave inline per dire al compilatore di chiamare una routine senza il sovraccarico di spingere i parametri nello stack. La funzione ha invece il suo codice macchina inserito nella funzione in cui è stato chiamato. Ciò può creare un aumento significativo delle prestazioni in determinati scenari.

Pericoli

I vantaggi di velocità nell'uso di "inlining" diminuisce significativamente all'aumentare della dimensione della funzione inline. L'uso eccessivo può effettivamente rallentare l'esecuzione di un programma. L'inserimento di una funzione di accesso molto piccola di solito riduce la dimensione del codice, mentre l'aggiunta di una funzione molto grande può aumentare notevolmente la dimensione del codice.

Inline in C #

In C # l'allineamento avviene a livello di JIT in cui il compilatore JIT prende la decisione. Al momento non esiste alcun meccanismo in C # che puoi fare esplicitamente. Se desideri sapere cosa sta facendo il compilatore JIT, puoi chiamare: System.Reflection.MethodBase.GetCurrentMethod (). Name in fase di esecuzione. Se il metodo è integrato, restituirà invece il nome del chiamante.

In C # non è possibile forzare un metodo per incorporare ma è possibile forzare un metodo per non farlo. Se hai davvero bisogno di accedere a un callstack specifico e devi rimuovere gli inline puoi usare: MethodImplAttribute con MethodImplOptions.NoInlining . Inoltre, se un metodo viene dichiarato come virtuale, non verrà neppure definito da JIT. Il motivo è che l'obiettivo finale della chiamata è sconosciuto.

Ulteriori informazioni sull'inline

Altri suggerimenti

Per la definizione e la discussione di inline, vedi questa domanda .

In C # non è necessario indicare al compilatore o al runtime di essere in linea perché il runtime lo farà automaticamente.

P.S. Questa risposta è corretta anche per Java.

Inline è quando invece di chiamare una particolare funzione, i contenuti della funzione vengono eseguiti direttamente nel sito di chiamata. Il motivo principale per farlo è che rimuove l'overhead della chiamata di una funzione eseguendo il contenuto della funzione nel sito di chiamata.

È usato come tecnica di ottimizzazione. Nel caso di C #, in realtà dipende dal motore CLR JIT per fare il lavoro. In fase di esecuzione, durante la compilazione di un metodo, il motore JIT utilizzerà un'euristica per determinare se una funzione incorporata è appropriata e sarà un'ottimizzazione efficace. In tal caso, viene eseguito un inline.

Vance ha pubblicato un ottimo articolo su ciò che la JIT considera in sede di definizione: http://blogs.msdn.com/vancem/archive/2008/08/19/to-inline-or-not-to- inline-che-è-il-question.aspx

Non è possibile forzare un inline in C #. La lingua non supporta questo costrutto. Principalmente perché le persone sono giudici molto poveri di ciò che dovrebbe essere ottimizzato. Il JITer è un giudice molto migliore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top