2011-08-21 91 views
1

我想每分钟批量插入一个集合内容到使用批量插入的sql服务器。基于时间的收集和事件

我使用ConcurrentBag将请求存储在内存中。

这样做的最佳做法是什么?或者如何做到这一点?

我知道我必须使用事件,我是否应该将集合包装到另一个类中并实现过期?

我如何将事件用于此目的?

回答

2

我认为这个要求不够通用,而且实现这个的代码很小,所以我个人认为没有必要创建一个单独的类。至少如果包含的类不是已经过于冗长和复杂的话。然而,这或多或少是一个品味问题。

为了达到您想要的效果,应该足够使用Timer类,并且在每个计时器tick上枚举将数据项插入数据库并同时从集合中删除它们的集合。 GetEnumerator ConcurrentBag适用于数据的快照,因此枚举时删除项目是安全的。

+0

为什么我会列举删除?已经有一个TryTake方法可以从包中取出。就计时器而言,简明书宣称它会导致内存泄漏。 – DarthVader

+0

你使用什么计时器?框架中有很多不同的计时器类。我不确定他的内存泄漏是什么意思。也许他指的是事件,它将保持包含事件处理程序的对象的引用......但这是使用事件时必须注意的一般事情。只有在事件不再使用时才注销事件。 – aKzenT

+0

至于TryTake当然它的工作原理是一样的。我只是喜欢用foreach ;-) – aKzenT