c# - ContextStaticAttribute 到底是什么?

标签 c# .net

来自documentation :

A static field marked with ContextStaticAttribute is not shared between contexts. If the indicated static field is accessed on a different context, it will contain a different value. Use this attribute as it is, and do not derive from it.

The following example shows the syntax of this attribute:

[ContextStatic]
static int f=7;

不幸的是,它没有阐明在这种情况下“上下文”的含义。有人可以举例说明何时使用此属性吗?

最佳答案

属性在您使用远程处理的情况下很重要,例如从 MarshalByRefObject 派生的类。然后,您的代码将与客户端程序中的代理一起工作,这是一个伪造的类对象,它看起来与原始类完全一样,但其方法由 CLR 实现,并将方法参数序列化到在服务器上运行的实际对象。通常在另一台机器上。

字段在这样的类中是一个问题,它们不能用替代方法来伪造。这是抖动处理的事情。当它检测到对 MRBO 对象中某个字段的访问时,它不会生成直接读取/写入该字段的代码,而是调用 CLR 中的辅助方法。它知道对象是代理对象还是真实对象,并直接返回字段值或进行远程调用。

这当然会增加开销,这是一个可以非常频繁访问的静态字段的问题。 [ContextStatic] 属性表示您不关心实际的静态字段值,它的本地副本就足够了。或者,如果出于某种原因在本地跟踪状态很重要,则可以有意使用它。我想不出一个很好的例子。框架程序员也没有,它没有在框架代码中的任何地方使用。

关于c# - ContextStaticAttribute 到底是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15927864/

相关文章:

c# - 在一行文本中提取一个整数并拆分

c# - Moq C# 内置类

javascript - 从 MVC 中的自定义 View 模型在 Razor 页面上使用 JavaScript 创建 JSON 对象数组?

.net - 如何使用/.NET 截取网站的屏幕截图?

VBA 浮点差异中的 C++ .NET COM 组件

c# - 我可以不使用 try catch() 来忽略错误吗?

c# - 与获取两天之间的天数相关的查询

c# - 使字典访问线程安全?

c# - IndexOutOfRange 显然不是

.net - 实现和使用 ICommand 接口(interface),MVVM