从可靠字典中删除项目实际上并不会从内存中删除它们

时间:2017-12-12 15:55:28

标签: azure-service-fabric

我正在使用有状态的服务,我正在使用可靠的字典作为工作项目存储。代码明智:

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

向下钻取LockManagerReaderWriterLockSlimDictionary<UInt64, LockHashValue>指向TStore中的值。

有没有办法强制清除IReliableDictionary中的项目(即从内存中删除已删除的项目)?

1 个答案:

答案 0 :(得分:0)

在深入研究之后,问题是删除只是逻辑删除 - 它实际上并没有从内存中删除项目。当内存中的更改被序列化为磁盘时,最终应该删除。