一些通過SAPABAP程式碼審查得出的ABAP程式設計最佳實踐
1. 這兩個IF ELSE分支裡檢測的條件其實邏輯上來說都是同一類,應該合併到一個IF分支裡進行檢查:
It is an expensive operation to open a file in application server with 50MB file size.
Current logic is:
1. Open the file in application server
2. Read the file content line by line
3. If the file is regarding IPG or MIDH or TPG, handle with each line separately
The correct logic should be:
1. Check the file path whether it is IPG or MIDH or TPG related. If not, quit the report.
2. Handle with each line directly without evaluate file path in the BIG loop.
The validation logic for input records should be improved
Loop at all service BOM, check whether the ID in current loop does exist in validation table lt_valid_prod or lt_valid_sp. If so, delete them via DELETE TABLE XXX FROM .
Improvement: use DELETE XXX WHERE product_id NOT IN . It is more efficient when lt_srv_bom_file has a huge number of records. See comparison below ( unit: second )
這是一個效能問題。使用ABAP原生支援的NOT IN關鍵字可以獲得更好的效能。效能評測如下:
Avoid using SELECT to access table with a large number of entries
In product / IObject area, the best practice is to use OPEN CURSOR / FETCH NEXT CURSOR to access big DB table.
如果需要用ABAP OPEN SQL讀取一張包含海量記錄的資料庫表,那麼推薦使用OPEN CURSOR進行分塊讀取。
Although this solution will spend almost the same time to fetch the data from DB, it has far less memory consumption compared with using SELECT to fetch ALL data from DB at one time.
The original dump due to out of memory issue could be eliminated by replace SELECT with OPEN CURSOR statement.
這種方式和直接用SELECT相比,能顯著減少記憶體消耗量。
使用併發程式設計提高應用程式場景
通過下面這段程式碼模擬一個費時的ABAP程式:
定義一個ABAP函式:
這個函式裡執行一大堆計算,然後把傳入的product ID寫到一張自定義表ZJERRY1裡。
呼叫這個函式的程式碼:
注意第二種方案使用STARTING NEW TASK達到的併發執行效果:
通過比較,第二種解決方案的效率是第一種的四倍。
1. The more CPU & DB time spent in ZINSERT, the better performance will be gained by using
parallel processing (Asynchronous RFC call).
2. The more number of ZINSERT call, the better performance will be gained by using parallel
processing.
相關文章
- 一些通過SAP ABAP程式碼審查得出的ABAP程式設計最佳實踐程式設計
- 程式碼審查或評審的最佳實踐 - FogBugz
- [譯] 程式碼審查之最佳實踐
- 程式猿必備的17款最佳的程式碼審查工具
- 通過程式碼審計找出網站中的XSS漏洞實戰(三)網站
- 通過程式碼審計找出網站中的 XSS 漏洞實戰 (三)網站
- 領域驅動設計最佳實踐--程式碼篇
- Python程式設計規範+最佳實踐Python程式設計
- 聚合型程式碼審計工具QingScan使用實踐
- 【轉】程式設計師必備的程式碼審查(Code Review)清單程式設計師View
- Java程式設計師的八個最佳實踐Java程式設計師
- Laravel最佳實踐–事件驅動程式設計Laravel事件程式設計
- Laravel 最佳實踐 -- 事件驅動程式設計Laravel事件程式設計
- Laravel最佳實踐 -- 事件驅動程式設計Laravel事件程式設計
- 函數語言程式設計最佳實踐函數程式設計
- 程式設計師必看:如何充分利用程式碼審查提升你的程式碼質量?程式設計師
- TypeScript 資料模型層程式設計的最佳實踐TypeScript模型程式設計
- [01] C#網路程式設計的最佳實踐C#程式設計
- [分享]2021 年對 React 前端程式設計師的 10 個程式碼最佳實踐建議React前端程式設計師
- python程式碼檢查工具(靜態程式碼審查)Python
- Semgrep結合GitLab實現程式碼審計實踐-服務端Gitlab服務端
- React 程式碼共享最佳實踐方式React
- 使用 Upsource 實現程式碼審查 - jetbrains 系列AI
- 編寫優雅程式碼的最佳實踐
- 程式碼審計中XSS挖掘一些體會
- Go 程式碼審查建議Go
- buu 程式碼審計
- JFinalcms程式碼審計
- CSCMS程式碼審計
- 異常值檢測!最佳統計方法實踐(程式碼實現)!⛵
- 通過 Socket 實現 TCP 程式設計入門TCP程式設計
- 通過 Socket 實現 UDP 程式設計 入門UDP程式設計
- Go程式設計實踐Go程式設計
- AI應用的程式碼審查CodeReviewAIView
- dart系列之:dart程式碼最佳實踐Dart
- 輕鬆連線 ChatGPT實現程式碼審查ChatGPT
- 無需程式設計,通過配置零程式碼生成CRUD RESTful API程式設計RESTAPI
- 什麼是程式碼審計?程式碼審計有什麼好處?