Vraag Wat is precies ContextStaticAttribute?


Van de documentatie:

Een statisch veld gemarkeerd met ContextStaticAttribute wordt niet gedeeld   tussen contexten. Als het aangegeven statische veld wordt geopend op a   verschillende context, zal het een andere waarde bevatten. Gebruik dit   attribuut zoals het is, en kom er niet van af.

In het volgende voorbeeld wordt de syntaxis van dit kenmerk weergegeven:

[ContextStatic]
static int f=7;

Helaas verduidelijkt het in dit geval niet wat er met "context" wordt bedoeld. Kan iemand een voorbeeld geven voor wanneer dit kenmerk zou worden gebruikt?


12
2018-04-10 13:54


oorsprong


antwoorden:


Het attribuut is van belang in een geval waarin u remoting gebruikt, zoals een klasse afgeleid van MarshalByRefObject. Uw code werkt dan met een proxy in het clientprogramma, een nep-klassenobject dat er precies zo uitziet als de oorspronkelijke klasse, maar waarvan de methoden door de CLR worden geïmplementeerd en de methode-argumenten in meerdere versies naar het werkelijke object dat op de server wordt uitgevoerd, worden gerangschikt. Meestal op een andere machine.

Velden zijn een probleem in een dergelijke klasse, ze kunnen niet worden gefingeerd met een vervangende methode. Dit is iets waar de jitter mee te maken heeft. Wanneer het de toegang tot een veld in een MRBO-object detecteert, genereert het niet de code om het veld rechtstreeks te lezen / schrijven, maar roept het in plaats daarvan een helper-methode op in de CLR. Welke weet of het object een proxy of het echte object is en retourneert ofwel direct de veldwaarde of voert in plaats daarvan een remoting-call uit.

Dit voegt uiteraard overhead toe, een probleem met een statisch veld dat heel vaak toegankelijk is. Het kenmerk [ContextStatic] zegt dat u niet geïnteresseerd bent in het hebben van de actuele statische veldwaarde, de lokale kopie ervan is goed genoeg. Of het kan opzettelijk worden gebruikt als om een ​​of andere reden het bijhouden van de staat lokaal belangrijk is. Ik kan hier geen goed voorbeeld van bedenken. Noch de kaderprogrammeurs, het wordt nergens binnen de raamwerkcode gebruikt.


4
2018-04-10 15:56



Zoals opgemerkt in de opmerkingen, de documentatie in de zie ook sectie verwijst naar de documentatie van Verbale contexten waardoor het een beetje duidelijker wordt op welke manier te graven.

De beste bron van informatie over het onderwerp dat ik zelf kon vinden, is http://blogs.msdn.com/b/tilovell/archive/2011/02/07/contextboundobject-part-1-making-contexts.aspx

Kortom - in 99% van de gevallen is dit kenmerk niet wat het op het eerste gezicht zou kunnen aanzien.


0
2018-04-10 15:10