代码之家  ›  专栏  ›  技术社区  ›  TheCloudlessSky

不使用时如何删除静态字典中的条目

  •  0
  • TheCloudlessSky  · 技术社区  · 16 年前

    我有一个静态类,它包含一个对象字典。我有多个线程可以访问此词典并在其上创建特定于 那个 线程。当线程“完成”时,如何以及何时从字典中删除条目?

    基本上,这是一个ASP.NET应用程序的静态类,所有请求都可以在字典中创建“独立对象”(与当前线程相关)。但是,我不想被绑定到ASP.NET。

    这有道理吗?

    3 回复  |  直到 16 年前
        1
  •  4
  •   Mehrdad Afshari    16 年前

    你可以用一个 [ThreadStatic] 属性和每个线程将看到自己的值。如果使用.NET 4.0,则可以使用 ThreadLocal<T> 也要这么做。基本上,每个线程都有一个单独的字典来保存自己的对象,而不是将所有对象保存在一个字典中。

        2
  •  0
  •   ChrisF    16 年前

    假设您将线程的ID(或其他一些唯一标识符)存储在对象中,您可以使用这个唯一ID从线程结束代码中触发一个事件,让字典知道线程已经完成了它的对象。

    静态类可以订阅此事件,然后通过字典循环删除所有具有此ID的对象。

    我想。

        3
  •  0
  •   Andrew Anderson    16 年前

    听起来您的字典被用作缓存。

    您是否考虑使用现有的缓存解决方案而不是滚动自己的解决方案?这个 Enterprise Library 有一个美好的 caching block 这允许您在如何管理缓存对象的生命周期方面具有极大的灵活性,包括在一段时间不活动后将其超时。(即螺纹消失)