我一直在玩我的派伦应用程序的计时装饰器,为特定功能提供动态计时信息。我通过创建一个decorator来实现这一点,只需将它附加到控制器中我想要计时的任何函数。在
不过,有人指出,decorator可能会给调用增加相当多的开销,而且它们的运行速度比未修饰的函数慢2-3倍。在
首先,我希望执行一个修饰函数比一个未修饰的函数要花更长的时间,但是我希望它的开销在千分之一秒之内,与SQL insert调用相比可以忽略不计。decorator本身使用时间。时间()一些非常简单的聚合。在
装饰师会给系统增加大量的开销吗?我找不到任何证据。在
Tags:
知道什么是装饰效果很重要:
只是语法上的糖
^{pr2}$因此,如果decorator不做任何事情,那么当调用修饰函数时就不会有任何开销(但是调用
decorator(f)
确实需要一点时间),比如如果decorator做了什么,那么您只得到decorator所涉及的任何时间开销。这通常包括一个附加的函数调用(修饰函数的调用),如
因此,就其本身而言,装饰一个函数并不会为您想做的事情增加太多的开销:原则上,您可以删除的唯一明显的开销是在修饰函数中不调用
func()
,而是复制它的完整代码,但是代码的易读性会受到影响(易读性和灵活性是装饰器首先存在的一些原因)。在使用decorator增加的开销应该只是一个额外的函数调用。在
decorator所做的工作不是开销的一部分,因为您可以选择向装饰对象添加等效代码。在
因此,decorate函数的运行时间可能是未修饰函数的两倍,但这是因为decorator正在做一些重要的工作,这些工作的有趣时间与未修饰的函数大致相同。在
它们几乎没有增加可测量的开销。零。在
需要注意的是,decorator运行一次来创建装饰函数。 一次。在
装饰功能有两个部分。在
不管加了什么装饰。这不是开销。
加上原来的功能。这不是开销。
根本没有真正的开销。您也许可以谨慎地测量一个额外的函数调用的开销,并将其作为修饰函数的一部分返回,但这几乎是无法测量的。而且它可能比不使用装饰的另类设计要少得多。在
相关问题 更多 >
编程相关推荐