Algorithm 如果一个函数在一秒钟内被调用超过一百万次,则打印一个错误
一个类中有一个函数,如果它在一秒钟内被调用超过一百万次,我们需要打印一个错误。这基本上是一个我们应该使用什么方法的设计问题Algorithm 如果一个函数在一秒钟内被调用超过一百万次,则打印一个错误,algorithm,data-structures,Algorithm,Data Structures,一个类中有一个函数,如果它在一秒钟内被调用超过一百万次,我们需要打印一个错误。这基本上是一个我们应该使用什么方法的设计问题 我正在考虑使用一个时间计数器和一个计数变量。每当计数变量的值超过一百万或每秒之后,时间计数器都会重置计数变量。如果您在0.1秒内收到900K个调用,然后计数器通过计时器重置,然后在0.1秒内收到另一个900K个调用,则您将在一秒内收到180万个调用,但您将无法打印错误 我会这样做: 每100K次呼叫,读取时钟并将时间存储在循环缓冲区中 在缓冲区中保留10次,以便在至少1M
我正在考虑使用一个时间计数器和一个计数变量。每当计数变量的值超过一百万或每秒之后,时间计数器都会重置计数变量。如果您在0.1秒内收到900K个调用,然后计数器通过计时器重置,然后在0.1秒内收到另一个900K个调用,则您将在一秒内收到180万个调用,但您将无法打印错误 我会这样做:
- 每100K次呼叫,读取时钟并将时间存储在循环缓冲区中
- 在缓冲区中保留10次,以便在至少1M次呼叫后,无论何时添加新时间,它都会替换先前1M次呼叫中的一次。如果这些时间之间的差异小于1秒,则应打印错误
这是“节流”的常见用例。只是不要检查每次调用的时间!我有一个类似的解决方案。缓冲区的大小不是随机的(如本答案中的10),而是取决于所需的时间精度。如果所需精度为0.05秒,则制作1/0.05=20的缓冲区。这将提供更好的结果,但可能会占用更多内存。缓冲槽的数量决定计数精度,而不是时间精度。