2012-03-07 15 views
12

Eventuali duplicati:
Inline functions in C#?
What is method inlining?che cosa fa questo attributo do: MethodImplOptions.NoInlining (o: ciò che è 'inlining' un metodo)

sono stato debug del codice e una "possibile" origine del problema è in una funzione contrassegnata con questo codice:

[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)] 
protected virtual void PropertyHasChanged() 

Lettura MSDN dice questo: Specifica che il metodo non può essere inlineato.

Ma che cos'è "inlining" un metodo?

EDIT:

Per chiarire: il metodo PropertyHasChanged() viene chiamato nel metodo SET di ogni proprietà e gli aggiornamenti (aggiunge 1 ad esso) un contatore oggetto interno. Quando quel contatore> 0, l'oggetto è contrassegnato come "sporco" e verrà salvato nel database quando viene richiamato il salvataggio. Quando il contatore = 0, l'oggetto non verrà salvato nel database. Ora ho l'idea che questo codice a volte non venga eseguito (il contatore non viene aumentato) quindi l'oggetto non verrà salvato nel database,

+2

Si noti che mentre questa è una domanda valida, l'inlining o no di questo metodo quasi certamente non ha nulla a che fare con qualunque problema si sta eseguendo il debug. – AakashM

+0

@Veger: ho letto quel post, ma si tratta principalmente di metodi inline in C#, e non di WHAT che significa ... – Michel

+0

(il mio candidato duplicato non è C# specifico, ma spiega in realtà cos'è inlining) – AakashM

risposta

18

Inlining un metodo/proprietà significa che il compilatore lo prende e lo sostituisce le chiamate ad esso con il suo contenuto (assicurandosi che le variabili corrette ecc.). Questo non è qualcosa che è specifico per C#.

Questo è fatto per le prestazioni normalmente.

Ad esempio, con questo metodo e chiamata:

private long Add(int x, int y) 
{ 
    return x + y; 
} 

var z = Add(x, y); 

il compilatore può inline come (eliminando il metodo nel processo):

var z = x + y; 

L'articolo Wikipeida Inline expansion inizia con:

In calcolo, espansione in linea o inlining, è un ottimizzazione manuale o del compilatore che sostituisce un sito di chiamata di funzione con il corpo del callee. Questa ottimizzazione può migliorare l'utilizzo di tempo e spazio in fase di esecuzione, al costo possibile di aumentare la dimensione finale del programma (ad esempio la dimensione del file binario).

+0

Grazie mille per questa chiara spiegazione! – Michel

+2

Per chiarezza: il compilatore C# non * mai * in linea un metodo. È compito di JITter. – IllidanS4

Problemi correlati