Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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
Performance Tcl源代码与Tcl包_Performance_Tcl - Fatal编程技术网

Performance Tcl源代码与Tcl包

Performance Tcl源代码与Tcl包,performance,tcl,Performance,Tcl,假设我不想给出每个源代码中的完整路径,什么时候我会选择tcl包而不是tcl源代码?包需要比源更快吗 我知道是什么软件包保护我们两次不获取代码,这是个问题吗?我只采购函数,所以我不介意两次采购函数,但这是否存在性能问题?当然存在性能问题。 考虑一下运行源命令时会发生什么: 必须打开提供给源命令的路径。 操作系统检查路径的权限,解析符号链接。 这对于你的特殊情况来说是次要的。 对于一些反复检查文件路径的应用程序来说,这可能是一个重大打击 (例如,网络服务器) 该文件已读入。 磁盘I/O。总是很慢

假设我不想给出每个源代码中的完整路径,什么时候我会选择tcl包而不是tcl源代码?包需要比源更快吗


我知道是什么软件包保护我们两次不获取代码,这是个问题吗?我只采购函数,所以我不介意两次采购函数,但这是否存在性能问题?

当然存在性能问题。 考虑一下运行源命令时会发生什么:

  • 必须打开提供给源命令的路径。
    操作系统检查路径的权限,解析符号链接。 这对于你的特殊情况来说是次要的。 对于一些反复检查文件路径的应用程序来说,这可能是一个重大打击 (例如,网络服务器)
  • 该文件已读入。 磁盘I/O。总是很慢
  • 对文件进行解析和解释。 解析总是很慢。
    Tcl有一个简单的规则集,因此它的解析速度可能比其他一些规则集要快
  • 因为你的功能被替换了。。。 这里的问题是字节码编译器现在忘记了任何优化 该功能将在第一次运行时比平时运行得慢 它被使用
始终了解您的程序正在使用哪些资源(cpu、磁盘、内存、网络),并尽量减少使用


观点:你会发现人们只是说,“获得更好的硬件”。这些人都是傻瓜,这就是为什么大多数网络速度如此之慢的原因。他们不必要地浪费资源。

看看你的核心问题:

软件包要求的速度是否比
源代码快

它们不具有直接可比性。

包是比脚本文件更高级的概念,您可以
source
,通常通过
source
调用一个或几个文件来实现。还有一种缓存机制,因此当您第一次执行
包require
时,它肯定会比
source
慢很多(因为如果包管理子系统无法识别您所要的包,它需要搜索您所拥有的包,这实际上涉及到在许多
pkgIndex.tcl
文件上使用
source
)对
包require
的后续调用可能会更快,因为包不会加载两次。一旦建立了内部索引(通常每个解释器花费一次),
包require
对已知但未加载的包的调用不会比直接
源代码
加载其实现文件慢多少。除此之外“更高级别”发生的事情:包可能根本不是由您可以
源代码
实现的,而是使用DLL的
加载
。或者它可以混合使用。这就是包的业务:您通常需要知道的是功能有一个名称和版本。这与直接
源代码
不同,您不需要这样做o准确地知道代码的位置(如果代码位于已知的固定位置或相对于当前脚本的位置,则很容易),并且该文件正是您所需要的。通常,最好从实现中拆分策略(例如,
包要求foobar 1.2.3
)(例如,
源代码-编码utf8/usr/local/lib/tcl/packages/foobar_1.2.3/foobar.tcl


包是一次性的结果是,它们不用于创建对象和类似对象的对象的实例(API中有效记录的单例除外)。包需要
来获取构造命令(可能是类)然后使用这些命令在需要时生成所需的实例