Cobol 使用外部工作存储变量是否会影响性能

Cobol 使用外部工作存储变量是否会影响性能,cobol,mainframe,Cobol,Mainframe,这个问题是关于IBMEnterpriseCobl4.2的 我有一个程序,需要更改和增加工作存储缓冲区。不幸的是,缓冲区大小的增加使我的工作存储区超过了最大128M。我的计划是采用一些较大的01变量,并使它们成为外部,但我担心这会影响系统性能 有人知道将工作存储变量设置为外部是否会降低系统性能吗 有人告诉我,大约一年后,我们将切换到COBOL6.1,因此如果性能略有下降,我们应该能够处理它,直到我们达到6.1(其中工作存储限制已增加到2G)首先,如果您使用了最大的工作存储空间(128MB),并且需

这个问题是关于IBMEnterpriseCobl4.2的

我有一个程序,需要更改和增加工作存储缓冲区。不幸的是,缓冲区大小的增加使我的工作存储区超过了最大128M。我的计划是采用一些较大的
01
变量,并使它们成为
外部
,但我担心这会影响系统性能

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


有人告诉我,大约一年后,我们将切换到COBOL6.1,因此如果性能略有下降,我们应该能够处理它,直到我们达到6.1(其中工作存储限制已增加到2G)

首先,如果您使用了最大的
工作存储空间(128MB),并且需要更多,您必须使用
外部
空间。无论它是否影响性能,您都需要它。它可能会降低性能(因为编译器需要加载更多数据),但延迟可以忽略不计

其次,使用
OPTIMIZE(FULL)
选项编译程序,这将列出程序中所有未使用的变量(我打赌你会找到一些)。这可以节省一些空间,而且代码更干净


希望这能有所帮助。

实际上,使用
外部
与系统调用带有每个外部数据项的程序无异,就像调用链接节数据项一样。我建议编译一个小程序,检查生成的代码,看看有什么不同

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数据
ls数据
之间没有区别


这将提供关于预期的“命中率”的具体信息。

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

我认为外部用于跨不同程序共享数据,但我认为它不会改变4.2上的128M限制。我需要进行实验,但当我研究这个问题时,也许使用链接和使用子程序来分配链接可以指向的存储空间会更容易一些?@Hogstrom有128个用于工作存储空间,另外128个用于外部存储空间。我只是不知道它会如何影响性能。一件事是,这会增加寄存器压力。每个级别1数据项将由BLX指针指向。看起来COBOLV4.2试图将加载的BLX值保存在寄存器中,但我认为您可能会看到更多关于BLX地址的L指令。最小化这一点的一种方法是最小化您创建的外部级别1数据项的数量。当您说生成的代码时,您是指查看程序集还是查找添加的代码(类似于DB2预编译器对DB2语句或CICS命令所做的操作)。@SaggingRufus-assembly。您知道哪个编译器选项将生成它吗?不幸的是,我以前从未为任何东西生成过程序集。@SaggingRufus-不,几十年来没有使用过它@SaggingRufus-似乎是
列表