与使用标准TCL读取文件和填充TCL数组相比,使用TCL C API读取文件和填充TCL数组要快得多。我有一个关于100+MB的大文件,我需要读取它并设置一些散列条目。使用TCL C API似乎不能提供最多2到4倍的速度优势。这是正常的吗?还是我错过了什么?
发布于 2012-07-26 18:16:08
在这种情况下,您不太可能获得很大的性能提升,因为当您从C API设置数组条目时,您将承担大量成本,如果只是在过程中以Tcl的形式编写代码。特别是,使用低效的子API很容易导致性能下降;Tcl的一些API函数速度不是很快(例如,Tcl_SetVar),但由于大量的现有代码在使用它们(并且较快的函数需要更多的C代码才能使用),所以它们被保留了下来。请记住,设置数组元素需要强制的哈希表查找,并且这些查找具有实际的成本(尽管Tcl使用了非常快的-如果相当愚蠢-哈希)。
更重要的是,您可以通过使用Tcl列表或字典(具体取决于您想要存储的内容)获得更好的性能,并且对它们的C API非常快(特别是对于列表,这实际上是Tcl_Obj引用的C数组)。我不知道的是,这样做是否适合你的目的。
发布于 2012-07-26 14:48:09
C API主要是用来编写Tcl扩展的,它只公开了“纯Tcl”本身所使用的例程。在你描述的这种情况下,我不希望看到太多的性能差异,并记住:
过早优化是编程中所有邪恶(或者至少是其中的大部分)的根源。
作为艺术的计算机编程(1974年),Donald Knuth
发布于 2012-07-26 16:17:19
如果你真的需要加载大量数据,也许像NAP (http://wiki.tcl.tk/4015)或类似的扩展是合适的?
https://stackoverflow.com/questions/11661397
复制相似问题