Domanda

Questa è una specie di una domanda niubbo. Ho una semplice proprietà

bool IsRoot { get { return parent==null; } }

che io chiamo più e più volte da altre proprietà e metodi all'interno della classe (e le classi derivate)

Mi piace mantenere in questo modo perché rende il codice leggibile (per me), ma temo che tutte le chiamate IsRoot stanno andando a rallentare me down in quanto non potrebbero essere "inline" nel codice rilascio finale. Quello che intendo per "inline" è che sono sostituiti da una copia della valutazione parent==null al posto di get_IsRoot().

Qualcuno può spiegare a me quando (o se) sono proprietà inline in C #, e per le applicazioni di performance orientate sono proprietà da evitare, o no?

EDIT_1 :   risposta breve è: Proprietà si traducono in chiamate di funzione puri e che potrebbero, o non potrebbe essere inline a seconda di ciò JIT decide. Fidati il ??sistema per fare le scelte giuste e non fare preoccuparsi di cose che potrebbero influenzare le cose nel livello 5% -10%, a meno che un profiler viene utilizzato e il risultato finale è sintonizzato per le prestazioni.

Grazie per i collegamenti in modo comunitario, e spero che ci fosse un modo per premio più risposte corrette. Spiacente ho dovuto sceglierne uno.

È stato utile?

Soluzione

Ecco un vecchio post di Eric Gunnerson che parla inlining.
Il succo è che il jitter decide se o una funzione è quella di essere inline. La mia comprensione è che si può "incoraggiare" inlining in una certa misura, scrivendo piccole funzioni, ma non sai come affidabile che è in realtà.

Ecco un altro link da una domanda qui su SO che fa una domanda simile. Molti collegamenti buoni sono inclusi.

Ecco un estratto da uno dei collegamenti dal secondo link che ho postato:

  

Un metodo breve e semplice che viene spesso utilizzato può essere in-foderato nel codice chiamante. Attualmente, il JIT è documentato (forse "bloggato su" sarebbe più precisa qui) a metodi in linea che sono meno di 32 byte di lunghezza, non contengono alcuna logica ramificazione complessa, e non contengono alcun meccanismo di movimentazione relative eccezioni. Vedi il blog di David Notario per alcune informazioni aggiuntive su questo argomento (nota che non è del tutto rilevante per CLR 2.0).

Suppongo che conta come una guida di riferimento di quando un metodo di potrebbe essere inline, ma non credo che si può dire che se un metodo non soddisfa i criteri di cui sopra che sarà essere inline.

Una nota a parte, è possibile forzare una funzione di L non essere inline ike questo:

[MethodImpl(MethodImplOptions.NoInlining)]
public void DoNotInlineMe()
{
  Console.WriteLine("Hello from non-inlined method");
}

Altri suggerimenti

Credo che questo sarà rispondere alla tua domanda

fa C Proprietà # linea?

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