2

与使用标准 TCL 执行相同操作相比,使用 TCL C API 读取文件和填充 TCL 数组会快得多。我有一个大约 100+MB 的大文件,我需要读取并设置一些哈希条目。使用 TCL C API 似乎最多不能提供 2 到 4 倍的速度优势。这是平常的还是我错过了什么?

4

3 回答 3

3

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

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

于 2012-07-26T10:16:07.973 回答
2

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

过早的优化是编程中万恶(或至少是大部分)的根源。

计算机编程作为一门艺术(1974 年),Donald Knuth

于 2012-07-26T06:48:09.240 回答
1

如果你真的需要加载大量数据,也许像 NAP (http://wiki.tcl.tk/4015) 或类似的扩展是合适的?

于 2012-07-26T08:17:18.713 回答