纯TCL与TCL C API的性能对比';用于填充TCL数组的

纯TCL与TCL C API的性能对比';用于填充TCL数组的,tcl,Tcl,与使用TCL C API读取文件和填充TCL数组相比,会快得多吗 使用标准TCL也可以做到这一点。我有一个大约100+MB的大文件,我需要读取并设置一些散列项。使用TCL C API似乎不能提供atmost 2到4倍的速度优势。这是正常现象还是我遗漏了什么?C API主要用于编写Tcl扩展,并公开了“纯Tcl”本身编写的例程。在您描述的情况下,我不希望看到太多性能差异,请记住: 过早优化是万恶之源(或者至少是大多数问题的根源) 它)在编程中 Donald Knuth的《计算机编程作为一门艺术》(

与使用TCL C API读取文件和填充TCL数组相比,会快得多吗
使用标准TCL也可以做到这一点。我有一个大约100+MB的大文件,我需要读取并设置一些散列项。使用TCL C API似乎不能提供atmost 2到4倍的速度优势。这是正常现象还是我遗漏了什么?

C API主要用于编写Tcl扩展,并公开了“纯Tcl”本身编写的例程。在您描述的情况下,我不希望看到太多性能差异,请记住:

过早优化是万恶之源(或者至少是大多数问题的根源) 它)在编程中

Donald Knuth的《计算机编程作为一门艺术》(1974)


如果您确实需要加载大量数据,可以使用一些扩展,如NAP(http://wiki.tcl.tk/4015)或者类似的方法是合适的?

在这种情况下,您不太可能获得很大的性能提升,因为当您从C API设置数组项时,如果您只是在一个过程中以Tcl的形式编写代码,那么您将承担大量的成本。特别是,通过使用低效的子API,您很容易获得更差的性能;Tcl的一些API函数不是很快(例如,
Tcl_SetVar
),但它们之所以保留下来,是因为使用它们的现有代码量很大(而且更快的函数需要使用更多的C代码)。请记住,设置数组元素需要一个强制的哈希表查找,而这些都有实际的成本(尽管Tcl使用了一个非常快速的(如果相当愚蠢的话)哈希表)


更重要的是,通过使用Tcl列表或字典(具体取决于您想要存储的内容),您可以获得更好的性能,而且这些列表的C API相当快(特别是对于列表,它实际上是
Tcl\u Obj
引用的C数组)。我不知道这样做是否适合您的目的。

Tcl的散列函数真的很愚蠢,我一直在努力研究它是否可以改进,但实际上很难让它变得更好。在Tcl脚本中最常见的情况下,为了更好地分发密钥而做的任何事情都会使函数变得相当慢(是的,我尝试了大量函数)。我认为这是一个相当令人失望的结果。(不过它确实把一些邪恶的定稿错误从木制品中抖了出来。)谢谢多纳尔。我将尝试使用列表而不是数组来改进原始TCL代码。schlenk,我使用flex和bison来处理输入文件,然后将其转换为数组。我不确定小睡是否对我有帮助。