小编win*_*goo的帖子

如果在修改字典时没有锁定字典会发生什么?关于asp.net缓存

对不起,我有很多关于锁/缓存的问题.= _ = ..

- > 1.关于缓存,我知道asp.net中的缓存是线程安全的,我通常使用的简单代码是

    IList<User> user= HttpRuntime.Cache["myCacheItem"] as IList<User>;
    if (user == null)
    { 
       //should i have a lock here?
       //lock(some_static_var){...}
       HttpRuntime.Cache["myCacheItem"] = GetDateFromDateBase();
    }

    return user;
Run Code Online (Sandbox Code Playgroud)

应该在代码中使用锁?

- > - > 1.1如果我使用,也许我应该申报许多锁定项目?我在社区服务器上看到了一些实现,它使用静态字典来存储锁定项,这是个好主意吗?因为我担心字典中的锁定项可能太多而且它可能会减慢系统速度.

- > - > 1.2如果我不使用,会发生什么?只是可能有两个或更多线程访问GetDateFromDateBase()?如果只是这个,我想也许我可以放弃锁定.

- > 2.i有一个存储在缓存中的通用字典,我必须修改(添加/更新/删除)它.我只是用它来获取像dic.trygetvalue(key)这样的值,不要循环它.

- > - > 2.1如果我可以保证修改只发生在一个线程中,场景就像
a.aspx - >从缓存中读取字典,并在页面上显示,public for user
b.ashx - >将修改调用它时的字典.(在5分钟内循环),私人使用

我应该在a/b中使用锁吗?锁定读者和作家?
- > - > - > 2.11如果我不使用任何锁,会发生什么?当读者和作者同时访问时,它会抛出异常吗?
- > - > - > 2.12如果我只是将作者锁定在b.ashx中,会发生什么?a.aspx中的读者会被阻止吗?什么是处理这种情况的最佳做法?

- > - > 2.2如果读写器都出现在多线程访问中.他们都是公共页面.
a.aspx …

asp.net caching dictionary locking thread-safety

0
推荐指数
1
解决办法
1297
查看次数

标签 统计

asp.net ×1

caching ×1

dictionary ×1

locking ×1

thread-safety ×1