- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
MemoryCache.AddOrGetExisting 的行为被描述为:
Adds a cache entry into the cache using the specified key and a value and an absolute expiration value.
它返回:
If a cache entry with the same key exists, the existing cache entry; otherwise, null.
具有这些语义的方法的目的是什么?这是什么例子?
最佳答案
通常情况下,如果匹配条目尚不存在,您只想创建一个缓存条目(也就是说,您不想覆盖现有值)。
AddOrGetExisting
允许您以原子方式执行此操作。没有AddOrGetExisting
以原子的、线程安全的方式执行 get-test-set 是不可能的。例如:
Thread 1 Thread 2
-------- --------
// check whether there's an existing entry for "foo"
// the call returns null because there's no match
Get("foo")
// check whether there's an existing entry for "foo"
// the call returns null because there's no match
Get("foo")
// set value for key "foo"
// assumes, rightly, that there's no existing entry
Set("foo", "first thread rulez")
// set value for key "foo"
// assumes, wrongly, that there's no existing entry
// overwrites the value just set by thread 1
Set("foo", "second thread rulez")
(另请参阅 Interlocked.CompareExchange
方法,它在变量级别启用更复杂的等效项,以及 test-and-set 和 compare-and-swap 上的维基百科条目。)
关于c# - MemoryCache.AddOrGetExisting 有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14698228/
我正在使用 (.NET 4.5) MemoryCache,结合 SlidingExpiration。 我注意到方法 .AddOrGetExisting() 似乎没有记住过期时间,而 .Get() 却有
MemoryCache.AddOrGetExisting 的行为被描述为: Adds a cache entry into the cache using the specified key and
我是一名优秀的程序员,十分优秀!