【问题标题】:Tcl proc call in foreach loop - efficiencyforeach 循环中的 Tcl proc 调用 - 效率
【发布时间】:2018-10-29 07:53:43
【问题描述】:

在我的 Tcl 代码中,我目前有一个返回 Tcl 列表的 proc。 我在 foreach 循环中调用这个 proc,如图所示

foreach a [get_objects] {
    # ...
}

相对于 Tcl,它的效率如何? 下面的样式更好吗?

set my_list [get_objects]
foreach a $my_list {
    # ...
}

仅供参考,列表的长度相当大。

【问题讨论】:

  • 从技术上讲,您不是在 in 中调用列表生成过程,而是在 foreach 循环的 ahead 中调用。在这两种情况下,列表只会有一个副本而不是多个副本,并且每次迭代都只会在一个列表元素上工作。你觉得有什么具体的问题吗?在这种形状中(除了一项额外的任务),我希望 sn-ps 的性能非常相似。
  • 另请注意,在您的第二个 sn-p 中,它应该是 set my_list [get_objects]
  • 这是一个猜测:我认为在第一个 sn-p 中,用于列表的内存将在循环结束后被释放(或有资格清理),而第二个 sn-p由于引用它的变量,将不得不保留该内存(除非您随后取消设置 my_list)。

标签: list foreach return tcl proc


【解决方案1】:

我相信第一个比较慢。 Tcl 没有编译器,因此程序只是“流动”而没有任何智能内存分配。 由于解释的作品,它不能删除 $my_list 因为它不知道下一个代码行,也许该变量将被使用。 可能在不知道 Tcl 解释器的情况下,第一个选项将释放为 [get_objects] 分配的内存。由于此操作,它将消耗更多时间。

【讨论】:

    猜你喜欢
    • 2015-07-12
    • 2013-02-19
    • 2015-06-01
    • 2016-09-02
    • 1970-01-01
    • 1970-01-01
    • 2015-10-13
    • 2015-07-20
    • 2012-03-02
    相关资源
    最近更新 更多