【发布时间】:2018-01-24 21:06:09
【问题描述】:
我正在使用 statefull 服务,并且我正在使用可靠的字典作为工作项存储。代码方面:
var workItemStore =
this.StateManager.GetOrAddAsync<IReliableDictionary<TKey, TValue>>(storeName);
调试内部显示这是一个返回 DistributedDictionary 类的包装器,即使用 TStore 类进行繁重的工作。
我有一个工作项处理器(有点像队列),我在其中向此存储 (workItemStore) 添加值,完成后我将删除它们。但是,当我进行内存转储时,即使在明确 GC.Collect() 之后,我仍然可以看到旧的(已删除的)键和值。
内存转储示例:
Object type | Count | Size (Bytes) | Inclusive Size (Bytes)
-------------------------------------------------------------------------------------
LockManager | 10,635 | 53,526,856 | 511,008,280
ReaderWriterLockSlim | 2,772,648 | 261,374,208 | 248,745,216
TStore<Guid, WorkItem, ...> | 3,236 | 15,999,256 | 216,851,864
Dictionary<UInt64, LockHashValue> | 2,772,560 | 217,807,600 | 207,288,816
向下钻取LockManager、ReaderWriterLockSlim 和Dictionary<UInt64, LockHashValue> 指向TStore 中的值。
有没有办法强制清除 IReliableDictionary 中的项目(即从内存中删除已删除的项目)?
【问题讨论】: