一些通過SAP ABAP程式碼審查得出的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 <current line>.
Improvement: use DELETE XXX WHERE product_id NOT IN <range table>. 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.
要獲取更多Jerry的原創文章,請關注公眾號"汪子熙":
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2565436/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 一些通過SAPABAP程式碼審查得出的ABAP程式設計最佳實踐程式設計
- 程式碼審查或評審的最佳實踐 - FogBugz
- [譯] 程式碼審查之最佳實踐
- SAP ABAP 平臺新的程式設計模型程式設計模型
- SAP官方釋出的ABAP程式設計規範程式設計
- 使用ABAP程式碼提交SAP CRM Survey調查問卷
- 玩了一下 SAP Fiori ABAP程式設計模型程式設計模型
- 在SAP雲平臺ABAP程式設計環境上編寫第一段ABAP程式程式設計
- SAP ABAP 程式之間的呼叫
- SAP 雲平臺 ABAP 程式設計環境的前世今生程式設計
- 如何使用ABAP程式碼建立SAP Product CategoryGo
- 如何使用 ABAP 程式消費 SAP ABAP OData 服務
- 如何在 SAP BTP ABAP 程式設計環境裡直接呼叫 ABAP On-Premises 系統的 RFC 函式程式設計REM函式
- ABAP初學者如何系統地學習ABAP程式設計?程式設計
- 淺談Java和SAP ABAP的靜態代理和動態代理,以及ABAP面向切面程式設計的嘗試Java程式設計
- SAP ABAP Gateway Client 的 ABAP 實現,重用 HTTP ConnectionGatewayclientHTTP
- SAP ABAP關鍵字語法圖和ABAP程式碼自動生成工具Code Composer
- 如何透過 ABAP 程式碼給 SAP OData 後設資料增添註解試讀版
- SAP Restful ABAP Programming 程式設計模型的 Action 實現和雲端除錯介紹REST程式設計模型除錯
- 一步步用ABAP Development Tools連線SAP雲平臺上的ABAP程式設計環境dev程式設計
- 使用ABAP程式碼給SAP CRM Business object建立附件AttachmentObject
- ABAP 程式語言中 Class(類)的設計原理剖析
- 使用 Prometheus 監控 SAP ABAP 應用程式Prometheus
- Java的Covariance設計原理和SAP ABAP的模擬實現Java
- ABAP Development Tool 程式碼模板和其他一些實用技巧彙總dev
- 如何在SAP Cloud Platform ABAP程式設計環境裡建立一個employeeCloudPlatform程式設計
- SAP ABAP Netweaver 裡的 ABAP 會話概念會話
- 一個好用的SAP ABAP工作程式跟蹤工具
- 使用ABAP程式設計實現對微軟Office Word文件的操作程式設計微軟
- 程式猿必備的17款最佳的程式碼審查工具
- 通過實際的例子,介紹 SAP ABAP 裡的 Repository Information System 的使用技巧ORM
- 通過程式碼審計找出網站中的XSS漏洞實戰(三)網站
- 通過程式碼審計找出網站中的 XSS 漏洞實戰 (三)網站
- 領域驅動設計最佳實踐--程式碼篇
- SAP SEGW 事物碼裡的 ABAP Editor
- 如何查詢Authorization object在哪些ABAP程式碼裡使用到Object
- 使用Java程式通過http post訪問ABAP Netweaver伺服器JavaHTTP伺服器
- ABAP程式碼分析工具 - 事務碼SQF