L'attributo è importante nel caso in cui si utilizza il servizio remoto, come una classe derivata da MarshalByRefObject. Il tuo codice funziona quindi con un proxy nel programma client, un oggetto di classe fasullo che assomiglia esattamente alla classe originale ma i cui metodi sono implementati dal CLR e serializzano gli argomenti del metodo sull'oggetto reale che gira sul server. Tipicamente su un'altra macchina.
I campi sono un problema in una classe di questo tipo, non possono essere simulati con un metodo sostitutivo. Questo è qualcosa che affronta il jitter. Quando rileva l'accesso a un campo in un oggetto MRBO, non genera il codice per leggere/scrivere direttamente il campo, ma chiama un metodo di supporto nel CLR. Che sa se l'oggetto è un proxy o l'oggetto reale e restituisce direttamente il valore del campo o effettua invece una chiamata remota.
Questo aggiunge un sovraccarico, naturalmente, un problema con un campo statico a cui è possibile accedere molto frequentemente. L'attributo [ContextStatic] dice che non ti interessa avere il valore del campo statico attuale, la sua copia locale è abbastanza buona. Oppure può essere usato intenzionalmente se per qualche ragione è importante tenere traccia dello stato localmente. Non riesco a pensare a un buon esempio di questo. Né ha fatto i programmatori di framework, non è utilizzato da nessuna parte all'interno del codice framework.
fonte
2013-04-10 15:56:35
Penso che sia utilizzato da .NET Remoting e dalle sue classi Context – Jehof
Vedere [questa risposta] (http://forums.asp.net/post/2428493.aspx). – Magnus
La documentazione ha un collegamento a ['Context'] (http://msdn.microsoft.com/en-US/library/system.runtime.remoting.contexts.context.aspx):" Una volta inserito un oggetto un contesto, rimane in esso per tutta la vita. Le classi che possono essere associate a un contesto sono chiamate classi con contesto. Quando si accede da un altro contesto, tali classi vengono referenziate direttamente utilizzando un proxy. " –