我使用以下方法读取一组文本文件(> 1000)并创建一个表格。 该文件是文本类型,文件大小以KB为单位。
foreach serverfile $serverfile_list {
set fileport [open $ptffile r]
#...........< other programming code to process on the data>
}
这需要大约2小时的时间来阅读。 有什么方法可以加快速度。
感谢您的意见和建议。
答案 0 :(得分:0)
这里有许多可能出错的事情;问题是不必然在您发布的代码行中。 (一旦你完成了文件处理,你应该记住close
文件处理;你记得这样做,是吗?)
通常,Tcl通常以单线程方式运行。这让你可以相对轻松地运行代码(多线程很多更难!)这意味着你可以计算出处理所有文件的预期时间 - 假设它们都花费大约相同的时间 - 通过采取处理其中一个并乘以文件数的时间。如果这给你几个小时,你的第一个问题将是如何加快处理一个文件(我们需要更多的信息来帮助你)。甚至可能是几个小时是必须花多长时间。
如果网络在处理系统和文件服务器之间饱和,那么它可能是其他的事情。 (你拥有的数据越多,关注这类事情就越重要。)或者可能存在网络争用。跟踪这些事情确实非常困难!但是,如果将典型文件复制到本地磁盘并将其处理时间与远程时所需的时间进行比较,则可以了解网络(或远程服务器)的责任。所花的时间。
最后,根据文件数量,您的代码可能会执行超线性的操作。 Tcl有一些有效的算法可以通过简单的操作来实现这一点,例如构建一个数组,append
到一个字符串或lappend
到一个列表,但这并不意味着你的代码会是对的。 (8.6.1中的lappend
中存在一个错误,即使用长列表一次性添加几个元素非常昂贵 - 这是偶然触发二次行为而不是正常的摊销线性 - 我和#39;已修复为不太长的8.6.2。解决方法是使用多个lappend
调用,每个调用都会添加一个元素。)
在所有情况下,我们无法在没有足够信息的情况下猜出错误!