使用字符串或将数据移动到固定字段更快



传统上,COBOL通过在由字段和填充符组成的工作存储中定义数据结构来写入打印输出,然后代码使用MOVE谓词将要打印的数据移动到字段(当然也有变体(。

一个可能的替代方案是使用STRING谓词来构造输出行记录。

我的目标平台是IBM ENTERPRISE COBOL,我目前无法访问它!该程序预计将使用数百万条记录运行,在编码开始之前,决策是至关重要的。我正在考虑STRING选项,因为它更灵活,将来可以在不更改代码的情况下更改打印行格式,这是一种现实的可能性,但不是具体的要求。

我的问题是:我预计,但不确定,字符串需要大量的CPU时间。使用STRING而不是MOVE会导致程序显著减慢(比如超过20%(吗?

我知道这个问题不是很精确,我不希望任何人有确切的答案,除非那个人做过类似的测试,但也许某个地方有人做过相似的测试,并根据测试做出了很好的猜测。

谢谢。

不要试图过度优化源代码以获得更好的性能。IMHO,编写更容易理解和维护的代码比试图通过预测将使用什么机器指令来提高性能的棘手代码更可取。

我并没有反驳Simon的回答,只是对它进行了修正。现代编译器在将(COBOL(源语句转换为机器指令时发挥了令人难以置信的魔力。我特别谈论IBM的Enterprise COBOL for z/OS,因为我在这方面有一些工作经验。除了优化级别之外,您还可以选择代码应该优化的目标体系结构级别,即处理器生成。根据这些设置,可以为同一源代码生成完全不同的机器指令序列。这对运行时性能的影响可能比使用一个代码序列而不是另一个更大。

我并不是说选择STRING而不是MOVE是过度优化。

STRING var DELIMITED BY SIZE into var-2的速度必须几乎与MOVE的速度一样快,因为它通常可以归结为相同的CPU指令。它甚至可以更快,因为STRING不做任何类型转换,而MOVE做任何类型的转换(这是MOVE"更强大"的地方(。

你在STRING中添加的短语越多(当然,这通常是"更强大"的命令(,运行时需要做的事情就越多,所以你会放慢速度,但如果你自己做同样的事情(比如增加位置计数器(,那么在一条语句中直接做这件事会更快。

对于性能来说,可能更重要的是代码";围绕这个";实际上是这样;打印";听起来像文件io(最好是文件,可能是DB2(-这是您需要调整性能的地方,而不是MOVESTRING-只需使用最合适的方法来完成任务-并注意对直接进入"0"的变量使用USAGE DISPLAY;"打印";,以及对于计数器和计算,最合适的CCD_ 10(可能是具有CCD_。

一如既往:确保获得最佳性能的唯一方法是在目标机器上进行实际测试

最新更新