使用 EXTERNAL 工作存储变量是否会影响性能
Is there a performance hit for using EXTERNAL working storage variables
这个问题是关于 IBM Enterprise COBOL 4.2 的。
我有一个程序需要更改和增加工作存储缓冲区。不幸的是,这种缓冲区大小的增加使我超过了工作存储部分的 128M 最大值。我的计划是采用一些较大的 01
变量并将它们设为 EXTERNAL
,但我担心这会影响系统性能。
有谁知道在外部创建工作存储变量是否会降低系统性能?
我被告知大约一年后我们将切换到 COBOL 6.1,因此如果性能下降很小,我们应该能够处理它直到我们获得 6.1(工作存储限制已经增加到2G)
首先,如果您使用了最大 WORKING-STORAGE
(128 Mb) 并且需要更多,则必须使用 EXTERNAL
space。不管它是否影响性能,无论如何你都需要它。它可能会降低您的性能(因为编译器需要加载更多数据),但延迟可以忽略不计。
其次,使用 OPTIMIZE(FULL)
选项编译您的程序,这将列出您程序中所有未使用的变量(我打赌您会找到一些)。这可以节省一些 space 并且代码更简洁。
希望对您有所帮助。
作为一个实际问题,使用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-data
和 ls-data
之间没有区别。
这将提供有关 "hit" 预期的具体信息。
在定位 EXTERNAL 数据项时涉及额外的检查(和名称查找)。当程序启动时,每个程序中定义的每个 01 级 EXTERNAL 数据项都会执行一次此处理。 EXTERNAL 数据项也有额外的内存管理开销(与工作存储定义的数据项相比。)
这个问题是关于 IBM Enterprise COBOL 4.2 的。
我有一个程序需要更改和增加工作存储缓冲区。不幸的是,这种缓冲区大小的增加使我超过了工作存储部分的 128M 最大值。我的计划是采用一些较大的 01
变量并将它们设为 EXTERNAL
,但我担心这会影响系统性能。
有谁知道在外部创建工作存储变量是否会降低系统性能?
我被告知大约一年后我们将切换到 COBOL 6.1,因此如果性能下降很小,我们应该能够处理它直到我们获得 6.1(工作存储限制已经增加到2G)
首先,如果您使用了最大 WORKING-STORAGE
(128 Mb) 并且需要更多,则必须使用 EXTERNAL
space。不管它是否影响性能,无论如何你都需要它。它可能会降低您的性能(因为编译器需要加载更多数据),但延迟可以忽略不计。
其次,使用 OPTIMIZE(FULL)
选项编译您的程序,这将列出您程序中所有未使用的变量(我打赌您会找到一些)。这可以节省一些 space 并且代码更简洁。
希望对您有所帮助。
作为一个实际问题,使用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-data
和 ls-data
之间没有区别。
这将提供有关 "hit" 预期的具体信息。
在定位 EXTERNAL 数据项时涉及额外的检查(和名称查找)。当程序启动时,每个程序中定义的每个 01 级 EXTERNAL 数据项都会执行一次此处理。 EXTERNAL 数据项也有额外的内存管理开销(与工作存储定义的数据项相比。)