使用EXTERNAL工作存储变量是否会对性能产生影响

时间:2018-12-11 18:24:40

标签: cobol mainframe

此问题与IBM Enterprise COBOL 4.2有关。

我有一个程序,需要更改并增加可用的存储缓冲区。不幸的是,缓冲区大小的增加使我无法超过工作存储部分的128M。我的计划是采用一些更大的01变量并将其设置为EXTERNAL,但我担心这会影响系统性能。

有人知道是否将工作存储变量设置为外部变量会降低系统性能?

有人告诉我,大约一年后,我们将切换到COBOL 6.1,因此,如果性能下降很小,我们应该能够处理直到达到6.1(工作存储限制已提高到6.1)。 2G)

3 个答案:

答案 0 :(得分:2)

在查找EXTERNAL数据项时需要进行额外的检查(并涉及名称查找)。程序启动时,每个程序中定义的01级EXTERNAL数据项都会执行一次此处理。与工作存储定义的数据项相比,EXTERNAL数据项还存在额外的内存管理开销。

答案 1 :(得分:1)

首先,如果您使用了最大的WORKING-STORAGE(128 Mb),并且需要更多空间,则必须使用EXTERNAL空间。无论它是否影响性能,无论如何您都将需要它。它可能会降低性能(因为编译器需要加载更多数据),但是这种延迟可以忽略不计。

第二,使用OPTIMIZE(FULL)选项编译您的程序,这将列出程序中所有未使用的变量(我敢打赌会找到一些)。这样可以节省一些空间,并且代码更简洁。

希望这会有所帮助。

答案 2 :(得分:1)

实际上,使用EXTERNAL与使用每个外部数据项调用程序的系统一样,就好像它是链接节数据项一样。我建议编译一个小程序并检查生成的代码,以了解有什么区别。

working-storage section.
01 ws-data pic x(8).
01 ext-data pic x(8) external.
linkage section.
01 ls-data pic x(8).
procedure division using ls-data.
begin.
    move spaces to ws-data
    move spaces tp ext-data
    move spaces to ls-data
    goback
    .

我怀疑访问ext-datals-data之间没有区别。

这将提供有关期望“命中”多少的具体信息。