我创建了一个简单的Play插件来创建用户通知。 这是通过使用一个有效的,有能力的集合来完成的。
lazy val unprocessed: Future[Enumerator[Event]] = {
for {
coll <- collection
} yield coll.find(Json.obj("processed" -> false))
.options(QueryOpts().tailable.awaitData)
.cursor[Event]
.enumerate()
}
插件在应用程序启动时启动,并使用带有此枚举器的Iteratee
val itr = Iteratee.foreach[Event](e => {
// Intentionally left empty for now
})
EventDao.unprozessed map(_.apply(itr))
这个代码的所有请求 - 也是那些不接触这里使用的集合/枚举器的请求将比以前慢至少5倍。
我已经尝试将上述两个段移到新的执行上下文中,但这没有用。
一旦我评论EventDao.unprozessed
,速度就会恢复正常。所以似乎运行时被占用了,看着可用的集合。
幕后发生了什么?