纯 TCL 与 TCL C API 在填充 TCL 阵列方面的性能



与使用TCL C API读取文件和填充TCL阵列相比,读取文件的速度会快得多吗与标准TCL做同样的事情。我有一个大约100多MB的大文件,我需要读取并设置一些哈希条目。使用TCL C API似乎无法提供2至4倍的速度优势。这是正常的还是我错过了什么?

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

更重要的是,您可以通过使用Tcl列表或字典(取决于您想要存储的内容)来获得更好的性能,并且这些列表的C API非常快速(尤其是对于列表,它实际上是Tcl_Obj引用的C数组)。我不知道这样做是否适合你的目的。

C API主要允许您编写Tcl扩展,并且只公开‘纯Tcl’本身编写的例程。在您描述的情况下,我不希望看到太大的性能差异,请记住:

过早的优化是万恶之源(或者至少是大多数it)。

计算机程序设计艺术(1974)

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

最新更新