首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenEdge级联的性能

OpenEdge级联的性能
EN

Stack Overflow用户
提问于 2017-11-11 00:26:23
回答 2查看 706关注 0票数 1

我注意到进度(11.4)中重复的字符串连接可能非常慢。例如,在以下代码中。

代码语言:javascript
复制
DEF VAR i AS INT NO-UNDO. 
DEF VAR c AS LONGCHAR NO-UNDO.

DO  i = 1 TO 1000000:
    c = c + STRING(i MOD 10). 
END.

根据我在Java的经验,我认为问题是,每次我们连接时,我们都在复制c,这是一个O(n)操作,所以整个过程是O(n^2)。Java提供了StringBuilder类来解决这个问题。

我对这个问题的分析正确吗?如果是的话,有解决办法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-13 07:46:47

这是一个已知的问题--以下链接还包含一个通过缓冲字符变量中的连接来解决的问题:

bigcharacter/

“进步”承认并在11.7.2中述及:

https://knowledgebase.progress.com/articles/Article/concatenating-to-longchar-takes-exponentially-longer

票数 2
EN

Stack Overflow用户

发布于 2017-11-12 05:03:42

出于好奇,我用你的示例代码做了一个测试,它用了266秒,或不到4.5分钟就完成了。

据我所知,Progress没有提供类似于字符串构建器的任何东西,但我认为我们做盲追加的方式应该是文件。因此,我修改了您的代码如下:

代码语言:javascript
复制
etime(true).
DEF VAR I AS INT NO-UNDO. 
DEF VAR c AS LONGCHAR NO-UNDO.
output to value(session:temp-directory + 'test.txt').
DO  i = 1 TO 1000000:
    put unformatted i mod 10.
END.
output close.
COPY-LOB FROM FILE SESSION:TEMP-DIRECTORY + 'test.txt' TO c.
disp c VIEW-AS EDITOR LARGE SIZE 70 BY 15.
MESSAGE etime
        VIEW-AS ALERT-BOX INFO BUTTONS OK.

通过采用这种方法,输出时间急剧下降,降至0.8秒多一点。

我不知道这是否对你的问题有帮助或回答,但正如詹斯所提到的,如果我们有一个实际的问题来解决,那就容易多了。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47233081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档