哪種性能更好?當我們有較少的條件檢查時,COBOL中的 「if else
」或「evaluate
」聲明?哪種性能更好? COBOL中的「if else」或「Evaluate」語句?
回答
看來,我們有一個懷疑者爲OP,所以這裏與IBM的企業COBOL一個例子:
01 A PIC 9.
PROCEDURE DIVISION.
ACCEPT A
IF A EQUAL TO 2
CONTINUE
ELSE
CONTINUE
END-IF
EVALUATE A
WHEN 2
CONTINUE
WHEN OTHER
CONTINUE
END-EVALUATE
這裏是它生成的代碼。你不需要知道IBM大型機彙編,你就必須要注意的事情是相同的:
000008 IF
0002F8 D200 D0F8 8000 MVC 248(1,13),0(8) TS2=0
0002FE 96F0 D0F8 OI 248(13),X'F0' TS2=0
000302 95F2 D0F8 CLI 248(13),X'F2' TS2=0
000306 4770 B126 BC 7,294(0,11) GN=4(00030E)
000009 CONTINUE
00030A 47F0 B126 BC 15,294(0,11) GN=5(00030E)
00030E GN=4 EQU *
000011 CONTINUE
00030E GN=5 EQU *
000013 EVALUATE
000014 WHEN
00030E D200 D0F8 8000 MVC 248(1,13),0(8) TS2=0
000314 96F0 D0F8 OI 248(13),X'F0' TS2=0
000318 95F2 D0F8 CLI 248(13),X'F2' TS2=0
00031C 4770 B13C BC 7,316(0,11) GN=12(000324)
000015 CONTINUE
000320 47F0 B13C BC 15,316(0,11) GN=11(000324)
000324 GN=12 EQU *
000016 WHEN
000017 CONTINUE
000324 GN=11 EQU *
持續,這不產生指令,用於在IF讓事情變得簡單了兩個「腿」和評估。
沒有理由相信任何非IBM編譯器生成的代碼在這兩個示例中會有所不同。
如果你還沒有精力來回答問題或者如果你不清楚的時候發表評論,那麼當你召喚能量問問題時,不要期望太多。
回到原來...
如果在COBOL程序有性能問題,這是極不可能將下降到使用中頻或評估本身。
EVALUATE可以用作嵌套IF的直接替代。
如果你發現一箇舊巢式是否會是這個樣子:
IF A
do something
ELSE
IF B
do something
ELSE
IF C
do something
ELSE
IF D
do something
ELSE
IF E
do something.
或者,像這樣:
IF A
do something
ELSE
IF B
do something
ELSE
IF C
do something
ELSE
IF D
do something
ELSE
IF E
do something.
你可以知道這是舊代碼,完整的,因爲停/期。
新代碼中的嵌套-IFs與EVALUATE相比更好。
它們的用法之間應該沒有真正的重疊,但從性能的角度來看,如果存在的話,它不是問題。
我不知道所有的編譯器,但如果一個IF/ELSE生成相同的代碼來執行簡單的EVALUATE/WHEN/WHEN時,我不會感到驚訝。
如果您有性能問題,請關注您的邏輯。
如果你正在考慮只是「優化」一個COBOL程序,讓它變得更好,那就把它忘掉吧。獲得邏輯直接和可以理解。使程序可維護。
如果您想了解讓你的程序運行快一點(和重點只可能是有點),然後寫不同類型的數字字段的一些操作一些測試程序(利用率顯示VS填充DECIMAL/COMP-3與BINARY/COMP /編譯器提供的各種其他非浮點COMP選項)。
檢查他們與下標,計數,累積值與小數位,多個來源的計算。然後你就會知道如何定義你的領域以達到他們的目的,並且不必在事後再考慮。
如果您有現場標準,請使用它們。
不要只編寫一個COBOL程序,然後坐下來,然後說「現在優化它」。這不是我們所做的。
這些差異在很大程度上是不相關的。不成熟的優化通常不是一個好主意。
編譯器會在編譯時優化兩者。在運行時,你的處理器會緩存最高執行代碼或者預測執行可能的路徑。
編寫源代碼的方法是編寫人員維護程序員,這些程序員會在你遇到並且在生產中炸開時看到0300上的程序。儘可能清楚代碼的作用。如果這意味着使用「IF」而不是「EVALUATE」,那麼請寫出可讀性。
只有當您進入生產環境並且您已經使用真實世界的數據對您的代碼進行了剖析時,纔會考慮調整性能。
Upvote for'usually'並避免Knuth通常的部分錯誤引用。 COBOL程序大部分時間都用於I/O,其餘大部分時間用在MOVE語句中。 – EJP
- 1. Cobol的if語句
- 2. 堆棧if語句或if-elif-else更好的Python風格?
- 3. 哪一個更好:if-elif-else或if-else
- 4. If/else語句
- 5. if-else語句的語法偏好
- 6. if else if else語句(JS)
- 7. if-else語句
- 8. 使用if-if或的if-else if-else語句的簡單功能
- 9. cobol嵌套的if語句
- 10. 功能與if/else語句
- 11. ELSE IF語句可能嗎?
- 12. IF else語句功能
- 13. if/else語句
- 14. XSL if else語句
- 15. 更好:switch-case或if-else?
- 16. If else語句
- 17. if else語句
- 18. 哪種效率更高? if語句
- 19. C#更好的方式來處理多個if/else if語句
- 20. if jquery中的else語句
- 21. If,else PHP中的語句
- 22. freemarker if-else或new if語句
- 23. Verilog if-else語句
- 24. if,else if echo語句
- 25. Javascript if/else語句
- 26. IF ELSE SQL中的語句
- 27. 哪種性能更好?和VS AndAlso
- 28. 的if else語句
- 29. Big if else語句
- 30. C#中的if else語句
哪個COBOL(供應商)?哪個OS? –