Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tcl 从服务器读取文件的更快方法_Tcl - Fatal编程技术网

Tcl 从服务器读取文件的更快方法

Tcl 从服务器读取文件的更快方法,tcl,Tcl,我正在使用下面的方法读取一组文本文件(>1000)并从中创建一个表。 文件为文本类型,文件大小以KBs为单位 foreach serverfile $serverfile_list { set fileport [open $ptffile r] #...........< other programming code to process on the data> } foreach serverfile$serverfile\u列表{ 设置文件端口[打开$ptffile

我正在使用下面的方法读取一组文本文件(>1000)并从中创建一个表。 文件为文本类型,文件大小以KBs为单位

foreach serverfile $serverfile_list {
set fileport [open $ptffile r]
    #...........< other programming code to process on the data>
}
foreach serverfile$serverfile\u列表{
设置文件端口[打开$ptffile r]
#待处理数据的其他编程代码>
}
阅读这篇文章需要花费大约2小时的时间。 有没有什么方法可以让这变得更快


感谢您的意见和建议。

这里有很多事情可能会出错;问题不一定出在您发布的代码行中。(处理完文件句柄后,您应该记得关闭它;您记得这样做,是吗?)

一般来说,Tcl通常以单线程方式运行。这可以让代码相对容易地工作(多线程更难!),这意味着您可以计算出处理所有文件的预期时间(假设它们都需要大约相同的时间长度),方法是将处理其中一个文件的时间乘以文件数。如果这给了你几个小时,你的第一个问题将是如何加快一个文件的处理速度(我们需要更多的信息来帮助你)。它甚至可能是,小时是它必须花费的时间

如果处理系统和文件服务器之间的网络饱和,则可能出现其他问题。(您拥有的数据越多,关注此类事情就越重要。)或者可能存在网络争用。追踪这类事情确实很难!但是,如果将一个典型文件复制到本地磁盘,并将处理时间与远程文件所需的时间进行比较,则可以了解网络(或远程服务器)所需时间的长短

最后,您的代码可能正在执行基于文件数量的超线性操作。Tcl拥有高效的算法,可以通过简单的操作(例如构建数组、
ing附加到字符串或
lappend
ing添加到列表)来实现这一点,但这并不意味着您的代码是正确的。(8.6.1中的
lappend
中有一个bug,这使得在长列表中同时添加几个元素非常昂贵-有一个二次行为的意外触发,而不是正常的摊销线性-我在8.6.2中修复了这个问题。一个解决方法是使用几个
lappend
调用,每个调用(一个元素)


在任何情况下,如果没有足够的信息,我们都无法猜出什么是错的

你是用包裹做桌子的吗?我见过sqlite读取文件的速度比使用
open
快,尽管它在读取数据并将数据输入到表中的过程中创建了一个临时文件。是的,每次文件操作后我都会关闭。当我将文件复制到本地系统时,几乎不需要30分钟,这是公平的,也没问题。我将检查所有提出的建议(网络速度,lappend…),看看这是否有助于提高整体性能。再次感谢您的关注。