我必须向TCL中的文件puts
大量数据,这需要很长时间。我尝试使用fconfigure
将缓冲区容量从4KB增加到1MB,但是没有注意到任何改进。
我不确定我是否可以flush
我的缓冲区,因为我猜测如果我这样做,我的某些数据会丢失。
有没有什么方法可以在不丢失任何数据的情况下提高看跌速度?
答案 0 :(得分:2)
通常输出速度会受到磁盘驱动器速度和计算机系统i / o带宽的限制。
增加缓冲区大小可能是您唯一可以提供帮助的方法。
flush会减慢写入速度,因为它会强制将写入缓冲区推送到操作系统。
如果您的传入数据流暂停或进入一个可以装入内存的大块,您可以在内部缓冲传入的数据,并让写入稍后赶上。
答案 1 :(得分:1)
如果您的数据来自其他渠道(文件,套接字等),那么您可以使用fcopy
移动它。 fcopy
命令尽可能高效地工作,并且如果配置双方(传入和传出)以使用二进制数据传输 - 那么否编码转换或EOL / EOF字符处理 - 然后它可以用最少的数据副本来做到这一点;它与用户进程级系统一样高效,可以复制数据(并且你必须做hackery才能将副本移动到OS内核中以做得更好)。显然,必须处理编码转换和行尾标记的转换会降低速度。
否则,主要瓶颈仍然(可能)是正在写入输出的设备。如果它要进入文件,转移到写入SSD是最简单的选择(但不一定是最便宜的!)当通过网络进行写入时,更好的网络将产生巨大的差异。你真的必须确定瓶颈究竟是什么;如果Tcl花费大部分时间等待硬件,那么努力使Tcl更快就没那么重要,因为你几乎看不到那项工作的结果。修复硬件瓶颈不在Stack Overflow的范围内,尽管一些姐妹站点可能会提供帮助。
puts
不会丢失数据,除非你做了一些非常邪恶的事情,比如在进程上执行强制终止(kill -9
),或者从C代码重置文件指针的位置。< / p>