列出过去一小时内的物品

时间:2014-11-04 17:12:26

标签: c# asp.net data-structures

我将内存中的值记录到列表类型结构中,并且只想保留在过去一小时内收集的项目。这是在asp.net mvc应用程序中,因此列表是静态的并且由多个线程访问。我目前每隔80分钟检查一次,并且只会删除超过60分钟的那些(只是因为每次请求都没有执行)。我对代码进行了锁定,该代码遍历结构以查找旧值,将这些值收集到临时文件夹中,然后将其从原始结构中删除。

我似乎遇到了一些锁定问题,所以很奇怪是否有某种内置结构或一些防弹代码可以帮助我这样做,而不是试图手动编码。

2 个答案:

答案 0 :(得分:1)

正如你所说" log"在你的列表中,似乎所有你需要的是线程安全

  • 将项目添加到最后
  • 将项目移至前面
  • 迭代它
  • 性能(我假设"遇到一些锁定问题"意味着性能不佳)

如果是这样,请使用ConcurrentQueue<T>。这消除了锁定的需要,以及enumerator

  

表示队列内容的时刻快照。调用GetEnumerator后,它不会反映对集合的任何更新。枚举器可以安全地与队列的读取和写入同时使用。

     

枚举器按照添加顺序返回集合元素,即FIFO顺序(先进先出)。

答案 1 :(得分:-1)

为什么你不使用thread-safe collections这种行为?试图发现一个byke?

另一种方法可以是使用Reactive Rx(但第二种方式可能会降低性能,但它在开发方面确实很棒)。

只要LINQ不是线程安全的,你应该使用它(你可能已经做过):

lock (lockObject)
{
    newCollection = yourCollection.Where(x => ...);
}

你可以使用observables,它们在查询时类似,但是是线程安全的。