【问题标题】:Removing items from reliable dictionary doesn't actually remove them from memory从可靠字典中删除项目实际上并没有从内存中删除它们
【发布时间】: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

向下钻取LockManagerReaderWriterLockSlimDictionary&lt;UInt64, LockHashValue&gt; 指向TStore 中的值。

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

【问题讨论】:

    标签: azure-service-fabric


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-19
      • 2012-02-21
      • 2012-08-31
      相关资源
      最近更新 更多