Requisiti: Guardando il codice sorgente .NET, ho notato che alcuni metodi hanno aggiunto la funzione [MethodImpl(MethodImplOptions.AggressiveInlining)], ma ho visto che la funzione MethodImpl può influenzare il comportamento del compilatore JIT. Alcuni test sono stati effettuati sulla base di informazioni trovate su Internet.
Configurazione MethodImplOptions
Codice:
Funzione in linea
In informatica, una funzione inline (a volte chiamata funzione online o funzione di espansione in tempo di compilazione) è un concetto di linguaggio di programmazione utilizzato per suggerire che il compilatore possa estensioni in linea (talvolta chiamate estensioni online) su alcune funzioni speciali; Ciò significa che il compilatore inserisce e sostituisce il corpo della funzione specificato al posto di ogni luogo (contesto) in cui viene chiamata la funzione, risparmiando il tempo aggiuntivo dedicato a ogni chiamata alla funzione. Tuttavia, quando si sceglie di utilizzare funzioni inline, è necessario valutare lo spazio occupato dal programma e l'efficienza dell'esecuzione del programma, perché troppe funzioni complesse per l'espansione inline comportano grandi spese di risorse di archiviazione. È anche importante notare che le estensioni inline di funzioni ricorsive possono causare una compilazione infinita di alcuni compilatori.
MethodImplOptions.AggressiveInlining
Funzione: Si raccomanda che il compilatore JIT integri il metodo il più possibile. Spiegazione: Inline si riferisce alla sostituzione di una chiamata di funzione con il corpo della funzione stesso, riducendo così l'overhead della chiamata della funzione. Scenari applicabili: Adatti a metodi piccoli e frequentemente chiamati (ad esempio, attribute accessor, calcoli matematici semplici, ecc.). Nota: Questa è solo una "proposta", il compilatore JIT può decidere se effettivamente inlineare o meno, a seconda della situazione reale.
I risultati del test "in linea" e "non in linea" sono i seguenti:
Il codice di prova è il seguente:
Si scoprì che l'uso della CPU dopo l'inline era molto inferiore rispetto a quello delle chiamate non inline, infattiNon essere troppo ansioso, i compilatori di oggi sono molto intelligenti, anche senza aggiungere questa funzione, il compilatore può aiutarti a ottimizzare automaticamente。 |