- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的应用程序在应用程序状态中存储两个相关的数据位。每次我读取这两个值时,我可能(取决于它们的值)都需要更新它们。
因此,为了防止在另一个线程正在读取它们时更新它们,我锁定了应用程序状态。
但是 HttpApplicationState.Lock Method 的文档真的没有告诉我它到底做了什么。
例如:
它是如何锁定的?它会阻止任何其他线程写入数据吗?
它是否也阻止读取访问?如果不是,那么这个练习就毫无意义,因为这两个值可以在另一个线程读取第一个值之后但在读取第二个值之前更新。
除了防止多个线程同时写入数据外,还有助于防止一个线程在另一个线程写入时进行读取;否则,第一个线程可能认为它需要在不需要时刷新数据。我想限制执行刷新的次数。
最佳答案
看代码是只锁写,不锁读。
public void Lock()
{
this._lock.AcquireWrite();
}
public void UnLock()
{
this._lock.ReleaseWrite();
}
public object this[string name]
{
get
{
return this.Get(name);
}
set
{
// here is the effect on the lock
this.Set(name, value);
}
}
public void Set(string name, object value)
{
this._lock.AcquireWrite();
try
{
base.BaseSet(name, value);
}
finally
{
this._lock.ReleaseWrite();
}
}
public object Get(string name)
{
object obj2 = null;
this._lock.AcquireRead();
try
{
obj2 = base.BaseGet(name);
}
finally
{
this._lock.ReleaseRead();
}
return obj2;
}
写和读都是线程安全的,也就是说都准备好了锁机制。因此,如果您正在进行读取数据的循环,则可以将其锁定在外部以防止其他人破坏列表。
阅读这个答案也很不错:Using static variables instead of Application state in ASP.NET
最好避免使用 Application 来存储数据,而直接使用带有锁定机制的静态成员,因为首先 MS 建议这样做,其次因为对应用程序静态数据的读/写是在每个调用锁定访问数据。
关于asp.net - HttpApplicationState.Lock 究竟做了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13095542/
在 Web 应用程序中,我只需要一个名为 ProcessManager 的类的实例。一种方法是使其成为单例。另一种方法是使用 HttpApplicationState 来确保我始终访问同一个实例,如下
我正在将 Web 服务迁移到 WCF,以便可以使用二进制编码。我现在意识到无法识别 session 调用和应用程序状态调用。 WCF 应该比 Web 服务更好,所以我假设有更好的方法来做事。 1) 如
我的应用程序在应用程序状态中存储两个相关的数据位。每次我读取这两个值时,我可能(取决于它们的值)都需要更新它们。 因此,为了防止在另一个线程正在读取它们时更新它们,我锁定了应用程序状态。 但是 Htt
我正在使用 MVC2 和 VS2010 开发网站,需要使用应用程序状态全局值。我可以设置一个像 'Application["hits"]=0;' 这样的值在 Global.asax 中,但当尝试在 M
我正在尝试为在 Application_Start 上加载的 ASPNET HttpApplication 测试“插件” . 代码是这样的: private HttpApplication appli
我有一个 Action 过滤器,它在过滤器上下文的 HttpContext 的 HttpApplicationState 中设置一个对象。我想在单元测试中使用此功能,但由于某种原因,该对象未设置在 H
我有以下问题。我正在尝试在应用程序中使用用 ASP.NET 编写的 Web 服务作为中间层,存储在 WCF 服务层中。因此,我实例化了一些 WebService 类,并像普通 C# 方法一样调用 We
当我需要在我的应用程序中缓存某些东西时,我曾经选择 Web.Caching.Cache。但是我遇到了一些使用 HttpApplicationState 的遗留代码。 既然 Web.Caching.Ca
我是一名优秀的程序员,十分优秀!