我的系统生成带整数的事件。总共有大约10 000个事件,从1到10 000.每当我收到新的事件时,我需要检查我已经收到多少次事件,这个数字在最后一秒:
所以我只需要控制并忽略具有相同数字的事件的“泛滥”。
有两个要求:
所以我的建议是:
Interlocked.Increment
数组中的相应项目时,只有当结果小于阈值(~3)时,我们才会处理它。因此,洪水控制只需一次Intrerlocked.Increment
操作和一次比较操作。
你有什么想要推荐更好的东西?
答案 0 :(得分:1)
你的方法有一个问题 - 如果你每秒都清除一次计数器 - 可能是你在第二次结束之前就已经有了洪水,但是因为你刚刚清除它,你将继续接受新的事件。登记/> 对你来说可能没问题,因为你只对近似有好处。
另一种方法可能是拥有一组时间戳队列。
当一个新事件进入时 - 您从阵列中获取相关队列并从头部清除过去发生的所有时间戳。
您检查队列的大小,如果它大于阈值则不执行任何操作 - 否则您将新的事件时间戳输入队列并进行处理。
我意识到这种方法可能比仅增加整数更慢,但它会更准确。
我想你可以运行一些基准测试,看看它的速度有多慢,是否符合你的需要。